2015-05-18 12 views
6

Używam WZP Wiosna rozruchu danych i teraz, mam to:Jak mogę załadować właściwości jpa do źródła danych w Spring?

@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; 

    } 

} 

i mój 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 

Co chciałbym wiedzieć, czy istnieje jakikolwiek sposób, aby załadować te JpaProperties automatycznie. Chcę, aby ta wiosna została skompilowana, ponieważ teraz, jeśli dodaję nową właściwość jpa do właściwości persistence.properties, to nie zauważę, że zmieni się, dopóki nie ustawię tej właściwości w obiekcie Properties. Czy wiesz, czy to możliwe? Pozdrowienia!

+2

Praca z ramami nie wokół ram. Zasadniczo możesz usunąć całą konfigurację, ponieważ Spring Boot skonfiguruje wszystko automatycznie. Zasadniczo to, co chcesz, działa domyślnie, ale dlatego, że pracowałeś nad wszystkim, co już nie działa. –

+0

Tak, działa po uruchomieniu z usługi. Problem polega na tym, że nie robię tego, kiedy uruchamiam moje testy w warstwie domeny ... Dlatego robię to ręcznie – jscherman

+1

Nie rób tego, powinieneś używać tego samego mechanizmu i nie obchodzić go. –

Odpowiedz

5

Jak M. Denium zasugerował, że nie musisz sam konfigurować tych ziaren, SpringBoot zrobi to za ciebie, jeśli skonfigurujesz właściwości w application.properties.

A jeśli chcesz mieć oddzielne właściwości źródła danych/jpa do testowania, użyj profili środowiska. Można utworzyć application-dev.properties, application-uat.properties, application-prod.properties, aby skonfigurować odpowiednie ustawienia środowiska i aktywować żądany profil.

Spójrz na liście SpringBoot obsługiwane właściwości w http://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/htmlsingle/#common-application-properties

Można skonfigurować właściwości WZP następująco:

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 

Jeśli zastosujemy tę konwencję nazewnictwa nie musisz sam konfigurować fasoli.

+0

Dzięki. Ale czy wiesz, dlaczego dostaję org.springframework.beans.factory.NoSuchBeanDefinitionException: Nie kwalifikującą się fasolą typu [javax.sql.DataSource] po uruchomieniu testów? Mam już adnotację SpringApplicationConfiguration wskazującą na DAOConfiguration.class (ma ona fasole implementacji JPA) i nadal nie działa. Nie rozumiem ... – jscherman

+0

Czy działa w głównej aplikacji i nie działa tylko w testach JUnit? Jeśli tak, możesz opublikować swoje fragmenty kodu JUnit? –

Powiązane problemy