SpringBoot数据源配置
SpringBoot数据源配置(mysql为例)
以下为配置JDBC、Mybatis数据源以及配置mybatis-generator问题的汇总:
关于properties和yml文件配置
按理说,SpringBoot项目中同时存在application.properties和application.yml文件时,两个文件都有效,但是properties文件的优先级比yml优先级高。但是,如果同时存在,往往会造成yml里面的配置没有被加载,从而报错(曾经困了我很久,难受得一),推荐:配置文件写在一个里面就行,以下为数据源基本配置:
application.properties配置:
spring.datasource.url=jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
#新版需要再url中加入serverTimezone=UTC,不然启动报错
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#配置mybatis信息
#pojo别名扫描包
mybatis.type-aliases-package=com.achan.springboot.beans
#加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
application.yml配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
#注意yml语法,换行、空格
#配置mybatis信息
mybatis:
type-aliases-package: com.achan.springboot.beans
mapper-locations: classpath:mapper/*Mapper.xml
数据源其他配置-需要有对应配置文件(可整合druid配置数据源监控,YML文件为例)
#数据源类型
type: com.alibaba.druid.pool.DruidDataSource
#连接初始值,连接池启动时创建的连接数量的初始值
initialSize: 5
#最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请
minIdle: 5
#连接池的最大值,同一时间可以从池分配的最多连接数量,0时无限制
maxActive: 20
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制
maxWait: 60000
#有两个含义: 1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
timeBetweenEvictionRunsMillis: 60000
#连接保持空闲而不被驱逐的最长时间
minEvictableIdleTimeMillis: 300000
#增加对连接池中连接的测试/验证,防止数据库认为连接已死而Web应用服务器认为连接还有效的问题
validationQuery: SELECT 1 FROM DUAL
#指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除
testWhileIdle: true
#借出连接时不要测试,否则很影响性能
testOnBorrow: false
#返回
testOnReturn: false
#是否对已备语句进行池管理(布尔值),是否对PreparedStatement进行缓存
poolPreparedStatements: true
#配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
#要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
maxPoolPreparedStatementPerConnectionSize: 20
#配置支持配置公用监控数据
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
mybatis-generator
MyBatis官方提供了逆向工程 mybatis-generator,可以针对数据库表自动生成MyBatis执行所需要的代码(如Mapper.java、Mapper.xml、POJO)。mybatis-generator 有三种用法:命令行、eclipse插件、maven插件。
如果使用maven插件方式
pom依赖如下:
<!--注意版本不同带来的问题-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
注意:1.3.5版本及以上,才能对mapperName进行修改
配置文件如下:
generator.properties
jdbc.driverLocation=D:/Project/java/libs/mysql-connector-java-5.1.47.jar
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
jdbc.userId=root
jdbc.password=root
注意:除了在properties配置数据源,连接数据库,还需要配置 jdbc.driverLocation,为本地或者项目路径下的mysql-connector-java-5.1.47.jar数据库驱动包,注意版本之间的匹配性
generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--导入属性配置 -->
<properties resource="generator.properties"></properties>
<!--指定特定数据库的jdbc驱动jar包的位置 -->
<classPathEntry location="${jdbc.driverLocation}"/>
<context id="default" targetRuntime="MyBatis3">
<!-- optional,旨在创建class时,对注释进行控制 -->
<commentGenerator>
<property name="suppressDate" value="true" />
</commentGenerator>
<!--jdbc的数据库连接 -->
<jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.connectionURL}" userId="${jdbc.userId}" password="${jdbc.password}">
</jdbcConnection>
<!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制-->
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类
targetPackage 指定生成的model生成所在的包名
targetProject 指定在该项目下所在的路径
-->
<javaModelGenerator targetPackage="com.achan.springboot.beans.entry" targetProject="src/main/java">
<!-- 是否对model添加 构造函数 -->
<property name="constructorBased" value="false"/>
<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="false"/>
<!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 -->
<property name="immutable" value="false"/>
<!-- 是否对类CHAR类型的列的数据进行trim操作 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
-->
<javaClientGenerator targetPackage="com.achan.springboot.dao.base" targetProject="src/main/java" type="MIXEDMAPPER">
<property name="enableSubPackages" value=""/>
<!--
定义Maper.java 源代码中的ByExample() 方法的可视性,可选的值有:
public;
private;
protected;
default
注意:如果 targetRuntime="MyBatis3",此参数被忽略
-->
<property name="exampleMethodVisibility" value=""/>
<!--
方法名计数器
Important note: this property is ignored if the target runtime is MyBatis3.
-->
<property name="methodNameCalculator" value=""/>
<!--
为生成的接口添加父接口
-->
<property name="rootInterface" value=""/>
</javaClientGenerator>
<table tableName="employee" domainObjectName="EmployeePO" mapperName="EmployeeBaseDao" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<generatedKey column="id" sqlStatement="MYSQL" identity="true" />
</table>
<table tableName="department" domainObjectName="DepartmentPO" mapperName="DepartmentBaseDao" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<generatedKey column="id" sqlStatement="MYSQL" identity="true" />
</table>
</context>
</generatorConfiguration>
注意:
- 是否创建构造函数的方式和set/get的方式
- 实体的名字和mapper的名字
- 以上为最基础的生成方式,不能生成api,service,需要对mybatis-generator进行扩展