Come configurare la mia applicazione Spring Boot in modo che quando eseguo i test unitari userà un database in memoria come H2/HSQL ma quando avvierò l'applicazione Spring Boot userà database di produzione [Postgre/MySQL]?Configurare il database specifico in memoria a scopo di test in primavera
risposta
I profili a molla possono essere utilizzati per questo. Questo sarebbe un modo specifico: ambiente
hanno proprietà specifiche file:
application.properties:
spring.profiles.active: dev
application-dev.properties
spring.jpa.database: MYSQL
spring.jpa.hibernate.ddl-auto: update
spring.datasource.url: jdbc:mysql://localhost:3306/dbname
spring.datasource.username: username
spring.datasource.password: password
applicazione -test.properties
spring.jpa.database: HSQL
avere sia MySQL e H2 piloti pom.xml
, come questo:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>test</scope>
</dependency>
Ultimo ma non meno importante, annotare le classi di test con @ActiveProfiles("test")
.
@Sanjay ha un modo per dirlo ma lo trovo confuso. Si potrebbe altrettanto bene avere solo un profilo production
che si attiva quando si è in produzione, qualcosa di simile a:
spring.jpa.hibernate.ddl-auto: update
spring.datasource.url: jdbc:mysql://localhost:3306/dbname
spring.datasource.username: username
spring.datasource.password: password
e non specificare nient'altro. Se aggiungi un database incorporato nello scope test
, sarà disponibile nei tuoi test. Se si eseguono i test con il profilo predefinito (nessuna personalizzazione di sorta), non troverà alcuna informazione sul database (poiché questi sono memorizzati nel profilo production
). In tal caso, cercherà di trovare un database incorporato e avviarlo per te. Se avete bisogno di più di personalizzazione, per qualche motivo, si può avere un application-test.properties
per chi (è necessario aggiungere ActiveProfiles("test")
per il test (s)
Nei miei scenari, avrei un database MySQL nel mio PC, che verrebbe utilizzato durante l'esecuzione locale dell'app durante lo sviluppo. Ecco perché pensavo che avessimo bisogno di un profilo 'dev' per eseguire l'app e un profilo' test' per eseguire i test attraverso il mio IDE. Qualunque semplificazione potrebbe essere fatta in questo caso? – Sanjay
Basta aggiungere 'application-dev.properties' con il tuo DB MySQL e abilitare il profilo' dev' quando esegui l'app dal tuo IDE. –
Ok, quello che capisco allora è che la mia risposta sopra sembra adatta a questo caso, tranne che avrei potuto saltare con il profilo 'test' e' @ ActiveProfile' se il profilo 'test' non aveva nulla tranne il DB. Fammi sapere se questo suona male. – Sanjay
soluzione semplice se edificio con maven
:. Il posto giusto un file di application.properties
sotto src/test/resources
e modifica come appropriato per i test
Il meccanismo di profilo Spring (Boot) è uno strumento piuttosto potente che, in ambito, va ben oltre "lo scambio delle impostazioni tra tempo di test e tempo di esecuzione" .Perché, chiaramente, come dimostrato, può fallo anche :)
Un altro approccio è aggiungere l'annotazione @AutoConfigureTestDatabase
al test classe. miei test di solito hanno questo aspetto: soluzione
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
public class MyRepositoryTest {
@Autowired
MyRepository repository;
@Test
public void test() throws Exception {
// Tests...
}
}
più semplice:
1) in src/main/risorse hanno application.properties (config produzione):
spring.datasource.url=jdbc:mysql://localhost:3306/somedb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
e l'applicazione-test .gli oggetti con HSQL config come:
spring.jpa.hibernate.ddl-auto = create-drop
spring.jpa.database = HSQL
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.HSQLDialect
spring.datasource.driverClassName = org.hsqldb.jdbcDriver
spring.datasource.url: jdbc:hsqldb:mem:scratchdb
spring.datasource.username = sa
spring.datasource.password =
2) Aggiungere HSQL dipendenza nel pom.xml se non lo avete già.
3) Annotare la classe di test con @ActiveProfiles ("test").
Ha funzionato come il fascino nel mio caso.
Ehi, come si imposta hsql da solo? –
Ciao @AlexBondar. È possibile utilizzare l'esempio prima, ma è possibile utilizzare replace = Replace.NONE in AutoConfigureTestDatabase – bpedroso
- 1. Come ricreare il database prima di ogni test in primavera?
- 2. Django - Compilazione di un database a scopo di test
- 3. Test @ programmato in primavera
- 4. Primavera Boot: Impossibile configurare
- 5. Come implementare solo il metodo specifico di CrudRepository in primavera?
- 6. Come configurare primavera RestTemplate con SSL (in primavera @MVC)
- 7. Test di avvio a molla con memoria db
- 8. Compilazione di SQLite in memoria per il test dell'unità
- 9. Come configurare JerseyTest con sicurezza di primavera?
- 10. https anche solo a scopo di test?
- 11. come configurare il template jms in primavera per weblogic?
- 12. configurare più database in zf2
- 13. Copia il database SQLite in memoria per rendere più veloci i test di unità
- 14. database in memoria in Python
- 15. Database temporaneo in memoria in SQLite
- 16. Come popolare il database solo una volta prima dei metodi @Test nel test di primavera?
- 17. Maven, configurare obiettivo specifico
- 18. Genera immagine in memoria per il test Django
- 19. Come posso simulare la connessione db in Spring Boot a scopo di test?
- 20. Configurare IntelliJ in modo che sia necessario un file di configurazione specifico per eseguire i test?
- 21. Creare una struttura di database in memoria da un'istanza Oracle
- 22. Configurare Gson in primavera prima di utilizzare GsonHttpMessageConverter
- 23. Scopo e relazione dei diversi contesti in primavera
- 24. cercando di scrivere test JUnit in primavera con JavaConfig
- 25. SQLiteOpenHelper più database in memoria
- 26. Esegui test in memoria db play framework
- 27. Come disabilitare @PostConstruct in primavera durante il test
- 28. Test del database in python, postgresql
- 29. Come eseguire test specifico in Nose2
- 30. Test di primavera con configurazione H2 db
Il profilo 'dev' mi sembra strano. Non dovrebbe essere quello "di produzione"? In questo caso, inserisci le informazioni in 'application.properties', non c'è bisogno di' spring.profiles.active'. –
Ho un profilo 'prod' separato. Se inseriamo le informazioni di 'dev' in * application.properties *, queste informazioni non verrebbero perse nel profilo' test'? – Sanjay
Tutto quello che sto dicendo è che non stai rispondendo alla domanda. Dev/test è confuso nella tua risposta. Mi aspetterei un profilo prod e quindi un profilo di test ma non uno "Dev". Si potrebbe anche avere un profilo "prod" con la produzione e lasciare il default per il test. Poiché Spring Boot non trova alcuna informazione specifica, userà il contenitore incorporato. –