Commit 2080768a by stylefeng

整理数据源配置

parent e6653d10
package com.stylefeng.guns.modular.code.controller; package com.stylefeng.guns.modular.code.controller;
import com.stylefeng.guns.core.base.controller.BaseController; import com.stylefeng.guns.core.base.controller.BaseController;
import com.stylefeng.guns.core.datasource.DruidProperties; import com.stylefeng.guns.core.config.properties.DruidProperties;
import com.stylefeng.guns.generator.action.config.WebGeneratorConfig; import com.stylefeng.guns.generator.action.config.WebGeneratorConfig;
import com.stylefeng.guns.generator.action.model.GenQo; import com.stylefeng.guns.generator.action.model.GenQo;
import com.stylefeng.guns.modular.code.factory.DefaultTemplateFactory; import com.stylefeng.guns.modular.code.factory.DefaultTemplateFactory;
......
...@@ -5,12 +5,9 @@ guns: ...@@ -5,12 +5,9 @@ guns:
swagger-open: true #是否开启swagger (true/false) swagger-open: true #是否开启swagger (true/false)
kaptcha-open: false #是否开启登录时验证码 (true/false) kaptcha-open: false #是否开启登录时验证码 (true/false)
# file-upload-path: d:/tmp #文件上传目录(不配置的话为java.io.tmpdir目录) # file-upload-path: d:/tmp #文件上传目录(不配置的话为java.io.tmpdir目录)
muti-datasource-open: false #是否开启多数据源(true/false)
spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false)
session-invalidate-time: 1800 #session失效时间(只在单机环境下生效,多机环境在SpringSessionConfig类中配置) 单位:秒 session-invalidate-time: 1800 #session失效时间(只在单机环境下生效,多机环境在SpringSessionConfig类中配置) 单位:秒
session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒
log:
path: guns-logs
spring: spring:
profiles: profiles:
...@@ -32,6 +29,9 @@ spring: ...@@ -32,6 +29,9 @@ spring:
mybatis-plus: mybatis-plus:
typeAliasesPackage: com.stylefeng.guns.modular.system.model typeAliasesPackage: com.stylefeng.guns.modular.system.model
log:
path: /opt/guns/logs
--- ---
spring: spring:
...@@ -46,10 +46,33 @@ spring: ...@@ -46,10 +46,33 @@ spring:
#多数据源配置 #多数据源配置
guns: guns:
muti-datasource: muti-datasource:
open: false
url: jdbc:mysql://127.0.0.1:3306/guns2?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC url: jdbc:mysql://127.0.0.1:3306/guns2?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC
username: root username: root
password: root password: root
defaultDataSourceName: dataSourceGuns #默认的数据源名称 dataSourceNames:
- dataSourceGuns
- dataSourceBiz
---
spring:
profiles: dev
datasource:
url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC
username: root
password: root
filters: wall,mergeStat
---
spring:
profiles: test
datasource:
url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC
username: root
password: root
filters: wall,mergeStat
--- ---
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<configuration> <configuration>
<!--定义日志存放的位置--> <!--定义日志存放的位置-->
<springProperty scope="context" name="gunsLogPath" source="guns.log.path" <springProperty scope="context" name="gunsLogPath" source="log.path"
defaultValue="guns-logs"/> defaultValue="guns-logs"/>
<!-- ****************************************************************************************** --> <!-- ****************************************************************************************** -->
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
<!-- 日志记录器,日期滚动记录 --> <!-- 日志记录器,日期滚动记录 -->
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 --> <!-- 正在记录的日志文件的路径及文件名 -->
<file>${gunsLogPath}/logs/log_error.log</file> <file>${gunsLogPath}/log_error.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 --> <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
<!-- 日志记录器,日期滚动记录 --> <!-- 日志记录器,日期滚动记录 -->
<appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 --> <!-- 正在记录的日志文件的路径及文件名 -->
<file>${gunsLogPath}/logs/log_total.log</file> <file>${gunsLogPath}/log_total.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 --> <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
......
...@@ -91,6 +91,12 @@ ...@@ -91,6 +91,12 @@
<artifactId>ehcache-core</artifactId> <artifactId>ehcache-core</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.stylefeng.guns.core.config; package com.stylefeng.guns.core.config;
import com.stylefeng.guns.core.datasource.DruidProperties;
import com.stylefeng.guns.core.mutidatasource.config.MutiDataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.PropertySource;
...@@ -17,15 +13,4 @@ import org.springframework.context.annotation.PropertySource; ...@@ -17,15 +13,4 @@ import org.springframework.context.annotation.PropertySource;
@PropertySource("classpath:/default-config.properties") @PropertySource("classpath:/default-config.properties")
public class DefaultProperties { public class DefaultProperties {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DruidProperties druidProperties() {
return new DruidProperties();
}
@Bean
@ConfigurationProperties(prefix = "guns.muti-datasource")
public MutiDataSourceProperties mutiDataSourceProperties() {
return new MutiDataSourceProperties();
}
} }
package com.stylefeng.guns.config; package com.stylefeng.guns.core.config;
import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor; import com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.stylefeng.guns.core.common.constant.DatasourceEnum; import com.stylefeng.guns.core.config.properties.DruidProperties;
import com.stylefeng.guns.core.config.properties.MutiDataSourceProperties;
import com.stylefeng.guns.core.datascope.DataScopeInterceptor; import com.stylefeng.guns.core.datascope.DataScopeInterceptor;
import com.stylefeng.guns.core.datasource.DruidProperties;
import com.stylefeng.guns.core.mutidatasource.DynamicDataSource; import com.stylefeng.guns.core.mutidatasource.DynamicDataSource;
import com.stylefeng.guns.core.mutidatasource.config.MutiDataSourceProperties; import com.stylefeng.guns.core.mutidatasource.aop.MultiSourceExAop;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;
...@@ -19,59 +19,63 @@ import java.sql.SQLException; ...@@ -19,59 +19,63 @@ import java.sql.SQLException;
import java.util.HashMap; import java.util.HashMap;
/** /**
* MybatisPlus配置 * 多数据源配置<br/>
* <p>
* 注:由于引入多数据源,所以让spring事务的aop要在多数据源切换aop的后面
* *
* @author stylefeng * @author stylefeng
* @Date 2017/5/20 21:58 * @Date 2017/5/20 21:58
*/ */
@Configuration @Configuration
@EnableTransactionManagement(order = 2)//由于引入多数据源,所以让spring事务的aop要在多数据源切换aop的后面 @ConditionalOnProperty(prefix = "guns.muti-datasource", name = "open", havingValue = "true")
@EnableTransactionManagement(order = 2)
@MapperScan(basePackages = {"com.stylefeng.guns.modular.*.dao"}) @MapperScan(basePackages = {"com.stylefeng.guns.modular.*.dao"})
public class MybatisPlusConfig { public class MultiDataSourceConfig {
@Autowired @Bean
DruidProperties druidProperties; @ConfigurationProperties(prefix = "spring.datasource")
public DruidProperties druidProperties() {
return new DruidProperties();
}
@Autowired @Bean
MutiDataSourceProperties mutiDataSourceProperties; @ConfigurationProperties(prefix = "guns.muti-datasource")
public MutiDataSourceProperties mutiDataSourceProperties() {
return new MutiDataSourceProperties();
}
/** @Bean
* 另一个数据源 public MultiSourceExAop multiSourceExAop() {
*/ return new MultiSourceExAop();
private DruidDataSource bizDataSource() {
DruidDataSource dataSource = new DruidDataSource();
druidProperties.config(dataSource);
mutiDataSourceProperties.config(dataSource);
return dataSource;
} }
/** /**
* guns的数据源 * guns的数据源
*/ */
private DruidDataSource dataSourceGuns() { private DruidDataSource dataSourceGuns(DruidProperties druidProperties) {
DruidDataSource dataSource = new DruidDataSource(); DruidDataSource dataSource = new DruidDataSource();
druidProperties.config(dataSource); druidProperties.config(dataSource);
return dataSource; return dataSource;
} }
/** /**
* 单数据源连接池配置 * 多数据源,第二个数据源
*/ */
@Bean private DruidDataSource bizDataSource(DruidProperties druidProperties, MutiDataSourceProperties mutiDataSourceProperties) {
@ConditionalOnProperty(prefix = "guns", name = "muti-datasource-open", havingValue = "false") DruidDataSource dataSource = new DruidDataSource();
public DruidDataSource singleDatasource() { druidProperties.config(dataSource);
return dataSourceGuns(); mutiDataSourceProperties.config(dataSource);
return dataSource;
} }
/** /**
* 多数据源连接池配置 * 多数据源连接池配置
*/ */
@Bean @Bean
@ConditionalOnProperty(prefix = "guns", name = "muti-datasource-open", havingValue = "true") public DynamicDataSource mutiDataSource(DruidProperties druidProperties, MutiDataSourceProperties mutiDataSourceProperties) {
public DynamicDataSource mutiDataSource() {
DruidDataSource dataSourceGuns = dataSourceGuns(); DruidDataSource dataSourceGuns = dataSourceGuns(druidProperties);
DruidDataSource bizDataSource = bizDataSource(); DruidDataSource bizDataSource = bizDataSource(druidProperties, mutiDataSourceProperties);
try { try {
dataSourceGuns.init(); dataSourceGuns.init();
...@@ -81,9 +85,9 @@ public class MybatisPlusConfig { ...@@ -81,9 +85,9 @@ public class MybatisPlusConfig {
} }
DynamicDataSource dynamicDataSource = new DynamicDataSource(); DynamicDataSource dynamicDataSource = new DynamicDataSource();
HashMap<Object, Object> hashMap = new HashMap(); HashMap<Object, Object> hashMap = new HashMap<>();
hashMap.put(DatasourceEnum.DATA_SOURCE_GUNS, dataSourceGuns); hashMap.put(mutiDataSourceProperties.getDataSourceNames()[0], dataSourceGuns);
hashMap.put(DatasourceEnum.DATA_SOURCE_BIZ, bizDataSource); hashMap.put(mutiDataSourceProperties.getDataSourceNames()[1], bizDataSource);
dynamicDataSource.setTargetDataSources(hashMap); dynamicDataSource.setTargetDataSources(hashMap);
dynamicDataSource.setDefaultTargetDataSource(dataSourceGuns); dynamicDataSource.setDefaultTargetDataSource(dataSourceGuns);
return dynamicDataSource; return dynamicDataSource;
...@@ -112,5 +116,4 @@ public class MybatisPlusConfig { ...@@ -112,5 +116,4 @@ public class MybatisPlusConfig {
public OptimisticLockerInterceptor optimisticLockerInterceptor() { public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor(); return new OptimisticLockerInterceptor();
} }
} }
package com.stylefeng.guns.core.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.stylefeng.guns.core.config.properties.DruidProperties;
import com.stylefeng.guns.core.datascope.DataScopeInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* 多数据源配置
*
* @author stylefeng
* @Date 2017/5/20 21:58
*/
@Configuration
@ConditionalOnProperty(prefix = "guns.muti-datasource", name = "open", havingValue = "false", matchIfMissing = true)
@EnableTransactionManagement
@MapperScan(basePackages = {"com.stylefeng.guns.modular.*.dao"})
public class SingleDataSourceConfig {
@Bean
//@ConfigurationProperties(prefix = "spring.datasource")
public DruidProperties druidProperties() {
return new DruidProperties();
}
/**
* 单数据源连接池配置
*/
@Bean
public DruidDataSource singleDatasource(DruidProperties druidProperties) {
DruidDataSource dataSource = new DruidDataSource();
druidProperties.config(dataSource);
return dataSource;
}
/**
* mybatis-plus分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
/**
* 数据范围mybatis插件
*/
@Bean
public DataScopeInterceptor dataScopeInterceptor() {
return new DataScopeInterceptor();
}
/**
* 乐观锁mybatis插件
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
package com.stylefeng.guns.core.datasource; package com.stylefeng.guns.core.config.properties;
import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSource;
......
package com.stylefeng.guns.core.mutidatasource.config; package com.stylefeng.guns.core.config.properties;
import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSource;
...@@ -10,18 +10,18 @@ import com.alibaba.druid.pool.DruidDataSource; ...@@ -10,18 +10,18 @@ import com.alibaba.druid.pool.DruidDataSource;
*/ */
public class MutiDataSourceProperties { public class MutiDataSourceProperties {
private String defaultDataSourceName = "dataSourceGuns";
private String url = "jdbc:mysql://127.0.0.1:3306/biz?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull"; private String url = "jdbc:mysql://127.0.0.1:3306/biz?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull";
private String username = "root"; private String username = "root";
private String password = "root"; private String password = "root";
private String driverClassName = "com.mysql.jdbc.Driver"; private String driverClassName = "com.mysql.cj.jdbc.Driver";
private String validationQuery = "SELECT 'x'"; private String validationQuery = "SELECT 'x'";
private String[] dataSourceNames = {"dataSourceGuns", "dataSourceBiz"};
public void config(DruidDataSource dataSource) { public void config(DruidDataSource dataSource) {
dataSource.setUrl(url); dataSource.setUrl(url);
dataSource.setUsername(username); dataSource.setUsername(username);
...@@ -54,14 +54,6 @@ public class MutiDataSourceProperties { ...@@ -54,14 +54,6 @@ public class MutiDataSourceProperties {
this.password = password; this.password = password;
} }
public String getDefaultDataSourceName() {
return defaultDataSourceName;
}
public void setDefaultDataSourceName(String defaultDataSourceName) {
this.defaultDataSourceName = defaultDataSourceName;
}
public String getDriverClassName() { public String getDriverClassName() {
return driverClassName; return driverClassName;
} }
...@@ -77,4 +69,12 @@ public class MutiDataSourceProperties { ...@@ -77,4 +69,12 @@ public class MutiDataSourceProperties {
public void setValidationQuery(String validationQuery) { public void setValidationQuery(String validationQuery) {
this.validationQuery = validationQuery; this.validationQuery = validationQuery;
} }
public String[] getDataSourceNames() {
return dataSourceNames;
}
public void setDataSourceNames(String[] dataSourceNames) {
this.dataSourceNames = dataSourceNames;
}
} }
...@@ -2,7 +2,7 @@ package com.stylefeng.guns.core.mutidatasource.aop; ...@@ -2,7 +2,7 @@ package com.stylefeng.guns.core.mutidatasource.aop;
import com.stylefeng.guns.core.mutidatasource.DataSourceContextHolder; import com.stylefeng.guns.core.mutidatasource.DataSourceContextHolder;
import com.stylefeng.guns.core.mutidatasource.annotion.DataSource; import com.stylefeng.guns.core.mutidatasource.annotion.DataSource;
import com.stylefeng.guns.core.mutidatasource.config.MutiDataSourceProperties; import com.stylefeng.guns.core.config.properties.MutiDataSourceProperties;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature; import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
...@@ -53,7 +53,7 @@ public class MultiSourceExAop implements Ordered { ...@@ -53,7 +53,7 @@ public class MultiSourceExAop implements Ordered {
DataSourceContextHolder.setDataSourceType(datasource.name()); DataSourceContextHolder.setDataSourceType(datasource.name());
log.debug("设置数据源为:" + datasource.name()); log.debug("设置数据源为:" + datasource.name());
} else { } else {
DataSourceContextHolder.setDataSourceType(mutiDataSourceProperties.getDefaultDataSourceName()); DataSourceContextHolder.setDataSourceType(mutiDataSourceProperties.getDataSourceNames()[0]);
log.debug("设置数据源为:dataSourceCurrent"); log.debug("设置数据源为:dataSourceCurrent");
} }
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.stylefeng.guns.core.base.controller.GlobalController,\ com.stylefeng.guns.core.base.controller.GlobalController,\
com.stylefeng.guns.core.config.DefaultFastjsonConfig,\ com.stylefeng.guns.core.config.DefaultFastjsonConfig,\
com.stylefeng.guns.core.config.DefaultMultiConfig,\ com.stylefeng.guns.core.config.MultiDataSourceConfig,\
com.stylefeng.guns.core.config.SingleDataSourceConfig,\
com.stylefeng.guns.core.config.DefaultProperties,\ com.stylefeng.guns.core.config.DefaultProperties,\
com.stylefeng.guns.core.config.DefaultWebConfig com.stylefeng.guns.core.config.DefaultWebConfig
\ No newline at end of file
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