Commit e7410c0d by 韩兵

add: 调整db配置

parent 0bb233d2
Pipeline #74700 passed with stages
in 2 minutes 8 seconds
......@@ -44,6 +44,7 @@
<!-- store-db -->
<mysql.version>5.1.34</mysql.version>
<mybatis.spring.boot.starter.version>1.1.1</mybatis.spring.boot.starter.version>
<druid.version>1.0.21</druid.version>
<!-- store-redis -->
<redis.clients.version>2.9.0</redis.clients.version>
......@@ -62,6 +63,7 @@
<commons.lang.version>2.4</commons.lang.version>
<des.version>1.0.2-SNAPSHOT</des.version>
<mapstruct.version>1.3.1.Final</mapstruct.version>
<pandora.version>1.1.0-SNAPSHOT</pandora.version>
</properties>
<!-- 子模块可选依赖 -->
......@@ -184,6 +186,17 @@
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.spring.boot.starter.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!--引入潘多拉-->
<dependency>
<groupId>com.netease.yanxuan</groupId>
<artifactId>pandora</artifactId>
<version>${pandora.version}</version>
</dependency>
<!-- store-redis -->
<dependency>
......
......@@ -26,6 +26,14 @@
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>com.netease.yanxuan</groupId>
<artifactId>pandora</artifactId>
</dependency>
<!--store-redis-->
<dependency>
......
package com.netease.mail.yanxuan.change.dal.config;
import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.pool.DruidDataSource;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.netease.yanxuan.pandora.DataSourceRefresher;
import com.netease.yanxuan.pandora.spring.annotation.EnableDataSourceRefresh;
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.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import java.util.Set;
/**
* @author hzfengyuexin@corp.netease.com
*/
@Configuration
@EnableTransactionManagement
@EnableApolloConfig("db-public")
@EnableDataSourceRefresh
@MapperScan(basePackages = "com.netease.mail.yanxuan.change.dal.mapper", sqlSessionFactoryRef = "sqlSessionFactoryBean")
public class DataSourceConfiguration {
@Autowired
private DrmDBConfig drmDBConfig;
/**
* pandora热切换数据源
* */
@Bean
public DataSourceRefresher dataSourceRefresher() {
DataSourceRefresher dataSourceRefresher = new DataSourceRefresher("db-public");
Set<String> dataSource = ImmutableSet.of("db.url", "db.driverClassName", "db.username", "db.password");
dataSourceRefresher.bindDataSourceWithPropertyKey("dataSource", dataSource);
return dataSourceRefresher;
}
/**
* merchant-order-db数据源
*/
@Bean(name = "dataSource")
@Primary
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(drmDBConfig.getDriverClassName());
dataSource.setUrl(drmDBConfig.getUrl());
dataSource.setUsername(drmDBConfig.getUserName());
dataSource.setPassword(drmDBConfig.getPassword());
// 初始连接数
dataSource.setInitialSize(1);
// 最大连接数
dataSource.setMaxActive(50);
// 最小空闲连接数
dataSource.setMinIdle(10);
// 配置获取连接等待超时的时间
dataSource.setMaxWait(60000);
dataSource.setValidationQuery("SELECT 'x'");
dataSource.setTestOnBorrow(true);
dataSource.setTestOnReturn(false);
dataSource.setTestWhileIdle(true);
// 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
dataSource.setTimeBetweenEvictionRunsMillis(60000);
dataSource.setMinEvictableIdleTimeMillis(300000);
StatFilter filter = new StatFilter();
filter.setSlowSqlMillis(5000);
filter.setLogSlowSql(true);
filter.setMergeSql(true);
dataSource.setProxyFilters(Lists.newArrayList(filter));
return dataSource;
}
@Bean(name = "sqlSessionFactoryBean")
@Primary
public SqlSessionFactoryBean sqlSessionFactoryBean() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
sqlSessionFactoryBean.setTypeAliasesPackage("com.netease.mail.yanxuan.change.dal.entity," + "com.netease.mail.yanxuan.change.dal.meta.model.po");
Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/*.xml");
sqlSessionFactoryBean.setMapperLocations(resources);
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setMapUnderscoreToCamelCase(true);
configuration.setCacheEnabled(true);
sqlSessionFactoryBean.setConfiguration(configuration);
return sqlSessionFactoryBean;
}
@Primary
@Bean(name = "sqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); }
/**
* 用于事务管理
*/
@Bean(name = "transactionManager")
@Primary
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
}
package com.netease.mail.yanxuan.change.dal.config;
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;
import com.ctrip.framework.apollo.spring.annotation.EnableAutoUpdateApolloConfig;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author hzfengyuexin@corp.netease.com
*/
@Data
@Component
@EnableAutoUpdateApolloConfig("db-public")
public class DrmDBConfig {
@ApolloConfig("db-public")
private Config config;
@Value("${db.url:}")
private String url;
@Value("${db.username:}")
private String userName;
@Value("${db.password:}")
private String password;
@Value("${db.driverClassName:}")
private String driverClassName;
}
/**
* @(#)DlockConfig.java, 2018/9/7.
* <p/>
* Copyright 2018 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.dal.config;
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;
import com.ctrip.framework.apollo.spring.annotation.EnableAutoUpdateApolloConfig;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author hzcaitianyu (hzcaitianyu@corp.netease.com)
*/
@Component
@EnableAutoUpdateApolloConfig("db-redis")
@Data
public class DrmRedisConfig {
@ApolloConfig("db-redis")
private Config config;
@Value("${redis.master:}")
private String master;
@Value("${redis.nodes:}")
private String nodes;
@Value("${redis.password:}")
private String password;
@Value("${redis.maxTotal:50}")
private Integer maxTotal;
@Value("${redis.maxIdle:20}")
private Integer maxIdle;
@Value("${redis.minIdle:1}")
private Integer minIdle;
@Value("${redis.maxWaitMillis:5000}")
private Integer maxWaitMillis;
}
\ No newline at end of file
package com.netease.mail.yanxuan.change.dal.config;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;
/**
* redis文件配置
*/
@Slf4j
@Configuration
public class RedisSentinelConfig {
@Autowired
private DrmRedisConfig drmRedisConfig;
@Bean
public RedisConnectionFactory lettuceConnectionFactory() {
Set<String> nodes = Arrays.stream(drmRedisConfig.getNodes().split(",")).collect(Collectors.toSet());
RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration(drmRedisConfig.getMaster(), nodes);
redisSentinelConfiguration.setPassword(RedisPassword.of(drmRedisConfig.getPassword()));
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
genericObjectPoolConfig.setMaxIdle(drmRedisConfig.getMaxIdle());
genericObjectPoolConfig.setMinIdle(drmRedisConfig.getMinIdle());
genericObjectPoolConfig.setMaxTotal(drmRedisConfig.getMaxTotal());
genericObjectPoolConfig.setMaxWaitMillis(drmRedisConfig.getMaxWaitMillis());
LettucePoolingClientConfiguration lettuceClientConfiguration = LettucePoolingClientConfiguration.builder().poolConfig(genericObjectPoolConfig).build();
return new LettuceConnectionFactory(redisSentinelConfiguration, lettuceClientConfiguration);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment