Ho provato il progetto suggerito da @btiernay (yandex-qatools). Ho passato un bel po 'di giorni con questo e senza alcuna offesa è finita la soluzione ingegnerizzata che non funziona nel mio caso perché volevo scaricare i binari dal repository interno piuttosto che andare su Internet pubblica. In teoria lo supporta ma in realtà non lo fa.
Ho finito per utilizzare otj-pg-embedded e funziona come un fascino. È stato menzionato nei commenti quindi ho pensato di menzionarlo anche qui.
L'ho usato come DB standalone e non tramite la regola per entrambi i test di unità e lo sviluppo locale.
Dipendenza:
<dependency>
<groupId>com.opentable.components</groupId>
<artifactId>otj-pg-embedded</artifactId>
<version>0.7.1</version>
</dependency>
Codice:
@Bean
public DataSource dataSource(PgBinaryResolver pgBinaryResolver) throws IOException {
EmbeddedPostgres pg = EmbeddedPostgres.builder()
.setPgBinaryResolver(pgBinaryResolver)
.start();
// It doesn't not matter which databse it will be after all. We just use the default.
return pg.getPostgresDatabase();
}
@Bean
public PgBinaryResolver nexusPgBinaryResolver() {
return (system, machineHardware) -> {
String url = getArtifactUrl(postgrePackage, system + SEPARATOR + machineHardware);
log.info("Will download embedded Postgre package from: {}", url);
return new URL(url).openConnection().getInputStream();
};
}
private static String getArtifactUrl(PostgrePackage postgrePackage, String classifier) {
// Your internal repo URL logic
}
fonte
2016-12-13 10:52:25
Questo è quello che farei anch'io. Uno script batch/shell per installare Postgres senza alcun programma di installazione è composto da 5 righe di codice. Anche se fare un initdb su ogni unità di test-run probabilmente sarà troppo lento. –
@a_horse_with_no_name Sì, puoi sempre decomprimere un database pre-initdb o copiare da un modello pulito che hai initdb se manca durante il processo di compilazione. Doloroso quando si aggiorna Pg però. Personalmente trovo initdb abbastanza veloce, ma non uso più i dischi rotanti. Per quanto riguarda il file batch, la sfida principale consiste nell'assicurarsi di utilizzare una porta non in conflitto (soprattutto se si eseguono test simultanei) e di essere davvero sicuri di aver terminato il server quando hai finito. Soprattutto su Windows, dove non è possibile eliminare il datadir fino a quando il server non viene arrestato. –
Si dice "non ha senso che un pezzo orientato al processo sia impacchettato come una libreria". Perchè no? Oggi puoi automatizzare IE usando una libreria Java. Certo, i processi verranno generati dietro le quinte, ma puoi comunque parlare comodamente con una libreria Java per realizzarla. Lo stesso dovrebbe essere possibile con PostgreSQL. Puoi avvicinarti a questo obiettivo incorporando un programma di installazione di PostgreSQL, ma c'è un bel po 'di codice per configurarlo in questo modo. –