spring boot 框架 、mybatis 持久层、druid 连接池、mysql 数据库
需求,两个电脑联合开发,但是没有云服务器,所以都用的本地数据库,这样配置不用多次修改数据库配置。
1、第一步建立spring boot项目,然后引入相关依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
2、配置文件里添加 mysql数据库连接配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
# 德鲁伊连接池配置
druid:
min-idle:5
max-active:100
initial-size:5
# 获取连接时最大等待时间,单位毫秒
max-wait:6000
filter:
stat:
# 开启慢查询记录
log-slow-sql:true
# 慢sql得时间设置 单位:毫秒
slow-sql-millis:5000
# sql合并配置
merge-sql:true
wall:
config:
merge-allow:true
stat-view-servlet:
# 是否开启stat-view-servlet
enabled:true
login-username: bingchuan
login-password: tianshi
init-global-variants:true
web-stat-filter:
exclusions:'*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*,/download/*,/wj/*,/assets/*'
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 合并多个DruidDataSource的监控数据
use-global-data-source-stat:true
# 多数据源配置
master :
#数据源1
# 设置类型为 DruidDataSource
driverClassname: com.mysql.cj.jdbc.Driver
# Loading class `com.mysql.jdbc.Driver'.
# This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'.
# The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
name: dataSource
url:"jdbc:mysql://localhost:3306/notes?useSSL=false&&characterEncoding=utf8"
username: root
password: 123456
cluster :
# 数据源2
# 设置类型为 DruidDataSource
driverClassname: com.mysql.cj.jdbc.Driver
# Loading class `com.mysql.jdbc.Driver'.
# This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'.
# The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
name: dataSource
url:"jdbc:mysql://localhost:3306/blog?useSSL=false&&characterEncoding=utf8"
username: root
password: tianshi
mybatis:
# 用于指定Mybatis的配置文件位置。如果指定了该属性,
# 那么会以该配置文件的内容作为配置信息构建对应的SqlSessionFactoryBuilder,
# 但是后续属性指定的内容会覆盖该配置文件里面指定的对应内容
# config-location: classpath:mybatis-config.xml
# 它表示我们的Mapper文件存放的位置,当我们的Mapper文件跟对应的Mapper接口处于同一位置的时候可以不用指定该属性的值
mapper-locations: classpath:mapper/*.xml
configuration:
# 全局启用或禁用在此配置下在任何映射器中配置的任何缓存
cache-enabled:true
# 它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。
# 多个package之间可以用逗号或者分号等来进行分隔。(value的值一定要是包的全名)
#
type-aliases-package: com.bingchuann.notes.pojo
# 启用从经典数据库列名A\u列到camel case经典Java属性名A列的自动映射-
# map-underscore-to-camel-case: true
# 允许JDBC支持生成的密钥。需要兼容的驱动程序。如果设置为true,
# 则强制使用生成的键,因为有些驱动程序否认兼容性,但仍然有效
# use-generated-keys: true
# 设置驱动程序等待数据库响应的秒数
# default-statement-timeout: 30000
3、配置主数据源和第二数据源
/**
* 主数据源配置
* @author zhangbingchuan 270083413@qq.com
* @date 2021/2/9 15:38
* Configuration 注解需要添加,不然会报错 未添加@Configuration注解,导致@Bean之间相互调用出错
*
*/
@Configuration
@MapperScan(basePackages ="com.bingchuan.notes.daonotes",sqlSessionFactoryRef ="masterSqlSessionFactory")
public class MasterDataSourceConfig {
public static final StringMAPPER_LOCATION ="classpath:mapper/master/*.xml";
@Value("${master.url}")
private Stringurl;
@Value("${master.username}")
private Stringusername;
@Value("${master.password}")
private Stringpassword;
@Value("${master.driverClassname}")
private StringdriverClassname;
@Bean(name="masterDataSource")
@Primary
public DataSource masterDataSource(){
DruidDataSource druidDataSource =new DruidDataSource();
druidDataSource.setDriverClassName(driverClassname);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
druidDataSource.setUrl(url);
return druidDataSource;
}
@Bean(name="masterDataSourceTransactionManager")
@Primary
public DataSourceTransactionManager masterDataSourceTransactionManager(){
return new DataSourceTransactionManager(masterDataSource());
}
@Primary
@Bean(name="masterSqlSessionFactory")
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource")DataSource masterDataSource)throws Exception {
final SqlSessionFactoryBean sessionFactoryBean =new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(masterDataSource);
// sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().
// getResource(MAPPER_LOCATION));
return sessionFactoryBean.getObject();
}
}
----------------------
/**
* 第二数据源配置
* @author zhangbingchuan 270083413@qq.com
* @date 2021/2/9 15:38
* Configuration 注解需要添加,不然会报错 未添加@Configuration注解,导致@Bean之间相互调用出错
*
*/
@Configuration
@MapperScan(basePackages ="com.bingchuan.notes.daoblog",sqlSessionFactoryRef ="clusterSqlSessionFactory")
public class ClusterDataSourceConfig {
public static final StringMAPPER_LOCATION ="classpath:mapper/cluster/*.xml";
@Value("${cluster.url}")
private Stringurl;
@Value("${cluster.username}")
private Stringusername;
@Value("${cluster.password}")
private Stringpassword;
@Value("${cluster.driverClassname}")
private StringdriverClassname;
@Bean(name="clusterDataSource")
public DataSource clusterDataSource(){
DruidDataSource druidDataSource =new DruidDataSource();
druidDataSource.setDriverClassName(driverClassname);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
druidDataSource.setUrl(url);
return druidDataSource;
}
@Bean(name="clusterDataSourceTransactionManager")
public DataSourceTransactionManager clusterDataSourceTransactionManager(){
return new DataSourceTransactionManager(clusterDataSource());
}
@Bean(name="clusterSqlSessionFactory")
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("clusterDataSource")DataSource masterDataSource)throws Exception {
final SqlSessionFactoryBean sessionFactoryBean =new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(masterDataSource);
// sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().
// getResource(MAPPER_LOCATION));
return sessionFactoryBean.getObject();
}
}
4、不同的数据源配置,单独指定dao层的package,然后引用对应的包就可以了。