Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how can i load jpa properties to datasource in Spring?

I am using Spring boot Data JPA and right now, i have this:

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

    }

}

And my 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

What i would to know is if there exists any way to load these JpaProperties automatically. I want that spring build it because right now, if i add new jpa property in persistence.properties, then it wouldn't be noticed that change until i put that property in Properties object. So, do you know if is that possible? Regards!

like image 590
jscherman Avatar asked May 18 '15 19:05

jscherman


1 Answers

As M. Denium suggested you don't have to configure all these beans by yourself, SpringBoot will do that for you if you configure properties in application.properties.

And if you want to have separate datasource/jpa properties for testing then use environment profiles. You can create application-dev.properties, application-uat.properties, application-prod.properties to configure respective environment settings and activate the desired profile.

Take a look at the SpringBoot supported properties list at http://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/htmlsingle/#common-application-properties

You can configure JPA properties as follows:

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

If you follow this naming convention you don't have to configure beans yourself.

like image 133
K. Siva Prasad Reddy Avatar answered Oct 10 '22 10:10

K. Siva Prasad Reddy