package com.juick.configuration; import org.apache.commons.dbcp2.BasicDataSource; import org.springframework.beans.factory.config.PlaceholderConfigurerSupport; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.env.Environment; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.TransactionManagementConfigurer; import javax.annotation.Resource; import javax.sql.DataSource; /** * Created by aalexeev on 11/11/16. */ @Configuration @EnableTransactionManagement @PropertySource(value = {"classpath:juick.conf", "file:${user.home}/juick.conf"}) public class DataConfiguration implements TransactionManagementConfigurer { @Resource private Environment env; @Bean public static PlaceholderConfigurerSupport propertySourcesPlaceholderConfigurer() { PlaceholderConfigurerSupport configurer = new PropertySourcesPlaceholderConfigurer(); configurer.setFileEncoding("utf-8"); configurer.setOrder(0); return configurer; } @Bean public DataSource dataSource() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName(env.getProperty("datasource_driver", "com.mysql.jdbc.Driver")); dataSource.setUrl(env.getProperty("datasource_url")); return dataSource; } @Bean public PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); } @Override public PlatformTransactionManager annotationDrivenTransactionManager() { return transactionManager(); } @Bean public JdbcTemplate jdbc() { return new JdbcTemplate(dataSource()); } }