blob: 841883077df4c37254a3d944717661bad02b121d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.rocketmq.eventbridge.adapter.persistence;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
* DatasourceConfig
*/
@Configuration
@MapperScan(basePackages = "org.apache.rocketmq.eventbridge.adapter.persistence.*.mybatis.*")
public class DatasourceConfig {
private static final String MAPPER_LOCATION = "classpath:mybatis/*.xml";
@Value("${spring.datasource.hikari.jdbc-url:jdbc:h2:./rocketmq_eventbridge;MODE=MySQL}")
private String baseUrl;
@Value("${spring.datasource.hikari.driver-class-name:org.h2.Driver}")
private String baseDriverClassName;
@Value("${spring.datasource.hikari.username:sa}")
private String baseUserName;
@Value("${spring.datasource.hikari.password:sa}")
private String basePassword;
@Value("${spring.datasource.hikari.minimum-idle:5}")
private Integer minIdle;
@Value("${spring.datasource.hikari.idle-timeout:180000}")
private Long idleTimeoutMs;
@Value("${spring.datasource.hikari.maximum-pool-size: 10}")
private Integer maxPoolSize;
@Value("${spring.datasource.hikari.auto-commit: true}")
private Boolean autoCommit;
@Value("${spring.datasource.hikari.pool-name: hikaricp}")
private String poolName;
@Value("${spring.datasource.hikari.max-lifetime: 180000}")
private Long maxLifeTime;
@Value("${spring.datasource.hikari.connection-timeout: 30000}")
private Long connectionTimeoutMs;
@Value("${spring.datasource.hikari.connection-test-query: select 1}")
private String connectionTestQuery;
@Value("${spring.datasource.hikari.validation-timeout: 500}")
private Long validationTimeoutMs;
@Bean("dataSource")
public DataSource getMasterDataSource() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setJdbcUrl(baseUrl);
hikariConfig.setDriverClassName(baseDriverClassName);
hikariConfig.setUsername(baseUserName);
hikariConfig.setPassword(basePassword);
hikariConfig.setMinimumIdle(minIdle);
hikariConfig.setIdleTimeout(idleTimeoutMs);
hikariConfig.setMaximumPoolSize(maxPoolSize);
hikariConfig.setAutoCommit(autoCommit);
hikariConfig.setPoolName(poolName);
hikariConfig.setMaxLifetime(maxLifeTime);
hikariConfig.setConnectionTimeout(connectionTimeoutMs);
hikariConfig.setConnectionTestQuery(connectionTestQuery);
hikariConfig.setValidationTimeout(validationTimeoutMs);
return new HikariDataSource(hikariConfig);
}
@Bean("sqlSessionFactory")
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
return bean.getObject();
}
@Bean("sqlSessionTemplate")
public SqlSessionTemplate masterSqlSessionTemplate(
@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}