JPA+C3P0多数据源连接

为啥会整这段代码。。。头痛。。。

因为我的项目中c3p0.*在数据库存储且为所有模块公用数据,但是这个存储中的minPoolSize和maxPoolSize不满足我当前的模块使用,需要建立一个更大连接数的Pool。但是又不能修改这两个值,否则全局所有模块都会建立一个大的连接数的Pool,所有模块这样会将DB的connection撑爆。

 

之前用的mybatis,第一次用hibernate,总结一下。

dataSource,mybatis和hibernate都一样,mybatis中需要创建的sqlSessionFactory,hibernate需要创建的是entityManagerFactory

 

1.创建DataSource的bean


@Configuration
@ComponentScan
@RefreshScope
public class SecondaryC3p0DataSource {

    @Value("${c3p0.user}")
    private String user;
    @Value("${c3p0.unreturnedConnectionTimeout}")
    private Integer unreturnedConnectionTimeout;
    @Value("${c3p0.testConnectionOnCheckout}")
    private Boolean testConnectionOnCheckout;
    @Value("${c3p0.password}")
    private String password;
    @Value("${c3p0.maxStatements}")
    private Integer maxStatements;
    @Value("${c3p0.maxIdleTime}")
    private Integer maxIdleTime;
    @Value("${c3p0.jdbcUrl}")
    private String jdbcUrl;
    @Value("${c3p0.initialPoolSize}")
    private Integer initialPoolSize;
    @Value("${c3p0.idleConnectionTestPeriod}")
    private Integer idleConnectionTestPreiod;
    @Value("${c3p0.driverClass}")
    private String driverClass;
    @Value("${c3p0.debugUnreturnedConnectionStackTraces}")
    private Boolean debugUnreturnedConnectionStackTraces;
    @Value("${c3p0.checkoutTimeout}")
    private Integer checkoutTimeout;

    @Value("${c3p0.minPoolSize}")
    private Integer minPoolSize;
    @Value("${c3p0.maxPoolSize}")
    private Integer maxPoolSize;
    @Value("${c3p0.breakAfterAcquireFailure}")
    private Boolean breakAfterAcquireFailure;
    @Value("${c3p0.acquireRetryDelay}")
    private Integer acquireRetryDelay;
    @Value("${c3p0.acquireRetryAttempts}")
    private Integer acquireRetryAttempts;
    @Value("${c3p0.acquireIncrement}")
    private Integer acquireIncrement;


    @Bean(name="mykDataSource")
    @Qualifier("myDataSource")
    public DataSource iflytekC3p0DataSource() {
        ComboPooledDataSource dataSource=new ComboPooledDataSource();
        dataSource.setUser(user);
        dataSource.setUnreturnedConnectionTimeout(unreturnedConnectionTimeout);
        dataSource.setTestConnectionOnCheckout(testConnectionOnCheckout);
        dataSource.setPassword(password);
        dataSource.setMaxStatements(maxStatements);
        dataSource.setMaxIdleTime(maxIdleTime);
        dataSource.setJdbcUrl(jdbcUrl);
        dataSource.setIdleConnectionTestPeriod(idleConnectionTestPreiod);
        try {
            dataSource.setDriverClass(driverClass);
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        dataSource.setDebugUnreturnedConnectionStackTraces(debugUnreturnedConnectionStackTraces);
        dataSource.setCheckoutTimeout(checkoutTimeout);
        dataSource.setBreakAfterAcquireFailure(breakAfterAcquireFailure);
        dataSource.setAcquireRetryAttempts(acquireRetryAttempts);
        dataSource.setAcquireIncrement(acquireIncrement);
        dataSource.setMaxPoolSize(800);
        dataSource.setMinPoolSize(10);
        dataSource.setInitialPoolSize(10);

        return dataSource;
    }
}

2.创建C3P0的entityManager,entityMaagerFactory,transactionManager,jdbcTemplate等

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "entityManagerFactory",
        transactionManagerRef = "transactionManager",
        basePackages = {"com.ink.snow.*"}//repository所在位置
)
public class MyC3p0Config {
    @Autowired
    @Qualifier("myDataSource")
    private DataSource dataSource;
    @Autowired
    private JpaProperties jpaProperties;


    @Bean(name = "entityManager")
    public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
        return entityManagerFactoryIflytek(builder).getObject().createEntityManager();
    }
    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryIflytek(EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(dataSource)
                .properties(getVendorProperties())
                .packages("com.ink.snow.*") //设置实体类所在位置
                .persistenceUnit("iflytekPersistenceUnit")
                .build();
    }
    private Map<String, Object> getVendorProperties() {
        Map<String, Object> ret = jpaProperties.getHibernateProperties(new HibernateSettings());
        ret.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
        return ret;
    }
    @Bean(name = "transactionManager")
    public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(entityManagerFactoryIflytek(builder).getObject());
    }
    @Bean(name = "myJdbcTemplate")
    public JdbcTemplate iflytekJdbcTemplate(){
        return new JdbcTemplate(dataSource);
    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值