2015-05-18 11 views
6

Sto usando JPA avvio dati primavera e in questo momento, ho questo:come posso caricare le proprietà jpa sull'origine dati in primavera?

@Configuration 
@PropertySource("classpath:persistence.properties") 
@EnableTransactionManagement 
public class PersistenceConfiguration { 

    @Autowired 
    private Environment env; 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) { 
     LocalContainerEntityManagerFactoryBean entityManager = new LocalContainerEntityManagerFactoryBean(); 
     entityManager.setDataSource(this.dataSource()); 
     entityManager.setPackagesToScan(new String[] {"com.example.movies.domain"}); 
     JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     entityManager.setJpaVendorAdapter(vendorAdapter); 
     entityManager.setJpaProperties(this.properties()); 
     return entityManager; 
    } 

    @Bean 
    @ConfigurationProperties(prefix = "spring.datasource") 
    public DataSource dataSource() { 
     return DataSourceBuilder.create().build(); 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) { 
     JpaTransactionManager transactionManager = new JpaTransactionManager(); 
     transactionManager.setEntityManagerFactory(emf); 
     return transactionManager; 
    } 

    @Bean 
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { 
     return new PersistenceExceptionTranslationPostProcessor(); 
    } 

    private Properties properties() { 
     Properties properties = new Properties(); 
     properties.setProperty("hibernate.ddl-auto", this.env.getProperty("spring.jpa.hibernate.ddl-auto")); 
     properties.setProperty("hibernate.dialect", this.env.getProperty("spring.jpa.hibernate.dialect")); 
     properties.setProperty("hibernate.show_sql", this.env.getProperty("spring.jpa.show-sql")); 
     return properties; 

    } 

} 

E i miei persistence.properties

spring.datasource.driverClassName=com.mysql.jdbc.Driver 
spring.datasource.url=jdbc:mysql://localhost:3306/sarasa_db 
spring.datasource.username=root 
spring.datasource.password=myPassword 

spring.jpa.hibernate.ddl-auto=update 
spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect 
spring.jpa.show-sql=false 

quello che vorrei sapere è se esiste un modo per caricare questi JpaProperties automaticamente. Voglio che la molla lo costruisca perché adesso, se aggiungo una nuova proprietà jpa in persistence.properties, non si noterà questa modifica finché non avrò messo quella proprietà nell'oggetto Properties. Quindi, sai se è possibile? Saluti!

+2

Lavorare con il framework non intorno al framework. Fondamentalmente puoi rimuovere tutta la tua configurazione in quanto Spring Boot configurerà tutto ciò automaticamente per te. Fondamentalmente quello che vuoi funziona di default ma perché hai lavorato su tutto ciò che non funziona più. –

+0

Sì, funziona se avvio dal servizio. Il problema è che non lo faccio quando eseguo i miei test nel livello dominio ... Ecco perché lo sto creando manualmente. – jscherman

+1

Non farlo, dovresti usare lo stesso meccanismo e non aggirarlo. –

risposta

5

Poiché M. Denium ha suggerito di non dover configurare tutti questi bean da soli, SpringBoot lo farà per te se si configurano le proprietà in application.properties.

E se si desidera disporre di proprietà separate origine dati/jpa per il test, utilizzare i profili ambiente. È possibile creare application-dev.properties, application-uat.properties, application-prod.properties per configurare le rispettive impostazioni dell'ambiente e attivare il profilo desiderato.

Date un'occhiata alla lista SpringBoot supportato proprietà a http://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/htmlsingle/#common-application-properties

È possibile configurare le proprietà JPA come segue:

JPA (JpaBaseConfiguration, HibernateJpaAutoConfiguration)

spring.jpa.properties.*= # properties to set on the JPA connection 
spring.jpa.open-in-view=true 
spring.jpa.show-sql=true 
spring.jpa.database-platform= 
spring.jpa.database= 
spring.jpa.generate-ddl=false # ignored by Hibernate, might be useful for other vendors 
spring.jpa.hibernate.naming-strategy= # naming classname 
spring.jpa.hibernate.ddl-auto= # defaults to create-drop for embedded dbs 
spring.data.jpa.repositories.enabled=true # if spring data repository support is enabled 

Se si segue questa convenzione di denominazione non devi configurare i bean da solo.

+0

Grazie. Ma sai perché ottengo org.springframework.beans.factory.NoSuchBeanDefinitionException: nessun bean qualificante di tipo [javax.sql.DataSource] quando eseguo i miei test? Ho già l'annotazione SpringApplicationConfiguration che punta a DAOConfiguration.class (ha bean di implementazioni JPA) e non sta ancora funzionando. Non capisco ... – jscherman

+0

Funziona nell'app principale e fallisce solo nei test di JUnit? Se è così, puoi pubblicare i frammenti di codice JUnit? –

Problemi correlati