当前位置: 代码网 > it编程>编程语言>Java > MySql8.0对应驱动包匹配注意点+SpringBoot连接MySQL+多数据源配置教程

MySql8.0对应驱动包匹配注意点+SpringBoot连接MySQL+多数据源配置教程

2026年03月30日 Java 我要评论
mysql 8.0及对应驱动包匹配注意点mysql 数据库更新为8.0及以上后,对应的应用程序数据库链接驱动包也要更新为8.0版本。否则会报驱动异常。需要注意以下几点:1.最新驱动包maven下载配置

mysql 8.0及对应驱动包匹配注意点

mysql 数据库更新为8.0及以上后,对应的应用程序数据库链接驱动包也要更新为8.0版本。否则会报驱动异常。

需要注意以下几点:

1.最新驱动包maven下载配置如下:

<dependency>
    <groupid>mysql</groupid>
    <artifactid>mysql-connector-java</artifactid>
    <version>8.0.11</version>
</dependency>
<dependency>
   <groupid>org.apache.commons</groupid>
   <artifactid>commons-pool2</artifactid>
   <version>${common.pool.version}</version>
</dependency>

2.jdbc配置表更新如下:

以前版本

jdbc.driver=com.mysql.jdbc.driver
jdbc.url=jdbc:mysql://xxx.xx.xx.xxx:3306/db?characterencoding=utf-8
jdbc.username=root
jdbc.password=admin

现在版本

jdbc.driver=com.mysql.cj.jdbc.driver
jdbc.url=jdbc:mysql://xxx.xx.xx.xxx:3306/db?useunicode=true&characterencoding=utf-8&usessl=false&servertimezone=gmt%2b8

jdbc.username=root
jdbc.password=admin

---------全局如下配置

spring.datasource.url = jdbc:mysql://127.0.0.1:3306/cim?useunicode=true&characterencoding=utf8&servertimezone=utc
spring.datasource.username = cim
spring.datasource.password = f8hypmssxl6xmzek
spring.datasource.type=com.zaxxer.hikari.hikaridatasource
spring.datasource.driver-class-name = com.mysql.cj.jdbc.driver

spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=master_hikari_pool
spring.datasource.hikari.max-lifetime=120000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=select 1
spring.datasource.hikari.validation-timeout=600000

使用jdbctemplate

①、依赖

<dependency>
   <groupid>mysql</groupid>
   <artifactid>mysql-connector-java</artifactid>
</dependency>
<dependency>
   <groupid>org.springframework.boot</groupid>
   <artifactid>spring-boot-starter-jdbc</artifactid>
</dependency>

maven编译项目时报错,信息如下:

解决方式一:在pom.xml文件增加如下配置信息

<plugin>
   <groupid>org.apache.maven.plugins</groupid>
   <artifactid>maven-surefire-plugin</artifactid>
   <configuration>
      <skip>true</skip>
   </configuration>
</plugin>

解决方式二:使用命令参数,如下所示:

②、在resource文件夹下application.properties配置文件中增加数据库参数

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dba
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.driver
spring.datasource.max-idle=10
spring.datasource.max-wait=1000
spring.datasource.min-idle=5
spring.datasource.initial-size=5

③、测试

@restcontroller
@requestmapping("/jte")
public class jdbctemplatecontroller {
    @autowired
    private jdbctemplate jdbctemplate;
    @requestmapping("/getusers")
    public list<map<string, object>> getdbtype(){
        string sql = "select * from boot_user";
        list<map<string, object>> list =  jdbctemplate.queryforlist(sql);
        for (map<string, object> map : list) {
            set<entry<string, object>> entries = map.entryset( );
                if(entries != null) {
                    iterator<entry<string, object>> iterator = entries.iterator( );
                    while(iterator.hasnext( )) {
                    entry<string, object> entry =(entry<string, object>) iterator.next( );
                    object key = entry.getkey( );
                    object value = entry.getvalue();
                    system.out.println(key+":"+value);
                }
            }
        }
        return list;
    }
    
}

启动maven项目,输入地址:

http://localhost:8080/jte/getusers

通过浏览器访问后,返回参数如下:

集成mybatis

①、添加依赖

<dependency>
   <groupid>org.mybatis.spring.boot</groupid>
   <artifactid>mybatis-spring-boot-starter</artifactid>
   <version>1.0.0</version>
</dependency>

②、在resource文件夹下application.properties配置文件中增加数据库参数

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dba
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.driver
spring.datasource.max-idle=10
spring.datasource.max-wait=1000
spring.datasource.min-idle=5
spring.datasource.initial-size=5

③、mapper接口类和xml文件

public interface bootusermapper {

    list<bootuser> selectall();
}
<?xml version="1.0" encoding="utf-8" ?>
<!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yoodb.study.demo02.mapper.bootusermapper" >
    <resultmap id="baseresultmap" type="com.yoodb.study.demo02.bean.bootuser" >
        <id column="id" property="id" jdbctype="varchar" />
        <result column="user_name" property="name" jdbctype="varchar" />
        <result column="detail" property="detail" jdbctype="varchar" />
    </resultmap>
    <select id="selectall" resultmap="baseresultmap">
    select
         id, user_name, detail
    from boot_user order by detail asc
    </select>
</mapper>
public class bootuser {
    private string id;
    private string name;
    private string detail;
    public string getid() {
        return id;
    }

    public void setid(string id) {
        this.id = id;
    }

    public string getname() {
        return name;
    }

    public void setname(string name) {
        this.name = name;
    }

    public string getdetail() {
        return detail;
    }

    public void setdetail(string detail) {
        this.detail = detail;
    }
}

④业务类

@service
public class bootuserservice {
    
    @autowired
    private bootusermapper mapper;
    public list<bootuser> getusers(){
         return mapper.selectall();
    }
}
@restcontroller
@requestmapping("/myt")
public class bootusercontroller {
    @autowired
    private bootuserservice service;
    @requestmapping("/getusers")
    public list<bootuser> getusers() {
        list<bootuser> list = service.getusers();
        return list;
    }

}

启动maven项目,通过浏览器访问http://localhost:8080/myt/getusers

解决方案:

<resources>
   <resource>
      <directory>src/main/java</directory>
      <includes>
         <include>**/*.xml</include>
      </includes>
   </resource>
</resources>

重新启动maven项目,输入地址: 

http://localhost:8080/myt/getusers

多数据源配置

一、spring boot集成mybatis和使用jdbctemplate配置公共文件

有两个数据源来配置实现,分别对应的名字是onedatasource和twodatasource

在application.properties文件中配置数据源信息如下:

spring.datasource.one.url=jdbc:mysql://123.57.47.154:3306/springboot1
spring.datasource.one.username=root
spring.datasource.one.password=wangyoodb
spring.datasource.one.driverclassname=com.mysql.cj.jdbc.driver

spring.datasource.two.url=jdbc:mysql://123.57.47.154:3306/springboot2
spring.datasource.two.username=root
spring.datasource.two.password=wangyoodb
spring.datasource.two.driverclassname=com.mysql.cj.jdbc.driver

二、配置类进行加载datasource

  • @configuration:用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@bean注解的方法。这些方法将会被annotationconfigapplicationcontext或annotationconfigwebapplicationcontext类进行扫描,并用于构建bean定义,初始化spring容器
  • @mapperscan:指定要扫描mapper类包的路径,配置mybatis的接口存放位置
  • @bean:用于告诉方法产生一个bean对象,然后这个bean对象交给spring管理
  • @configurationproperties:是spring boot提供的类型安全的属性绑定,以第一个bean为例。@configurationproperties(prefix = “spring.datasource.one”)表示使用spring.datasource.one前缀的数据库配置去创建一个datasource
  • @primary:可以理解为默认优先选择,不可以同时设置多个,必须增加此注解用于区分主数据库(默认数据库)。
  • @qualifier:来达到注入某个特指bean的作用,表示查找spring容器中指定名字的对象

【bean.setmapperlocations(new pathmatchingresourcepatternresolver().getresources(“***”)) mapper的xml形式文件位置必须要配置,不然项目会报no statement错误信息。】

@configuration
@mapperscan(basepackages = "com.yoodb.study.demo03.mapper.one", sqlsessionfactoryref = "onesqlsessionfactory")
public class datasourceoneconfig{
	
	@bean(name = "onedatasource")
	@primary
	@configurationproperties(prefic = "spring.datasource.one")
	public datasource getdatesourceone(){
		return datasourcebuilder.create().build();
	}

	@bean(name="onesqlsessionfactory")
	@primary
	public sqlsessionfactory onesqlsessionfactory(@qualifier("onedatasource") datasource datasource) throws exception{
		sqlsessionfactorybean bean = new sqlsessionfactorybean();
		bean.setdatasource(datasource);
		bean.setmapperlocations(new pathmatchingresourcepatternresolver().getresources("classpath*:mapper/one/*.xml"));
		return bean.getobject();
	}

	@bean("onesqlsessiontemplate")
	@primary
	public sqlsessiontemplate onesqlsessiontemplate(@qualifier("onesqlsessionfactory") sqlsessionfactory sessionfactory){
		return new sqlsessiontemplate(sessionfactory);
	}
}
@configuration
@mapperscan(basepackages = "com.yoodb.study.demo03.mapper.two", sqlsessionfactoryref = "twosqlsessionfactory")
public class datasourcetwoconfig {

    @bean(name = "twodatasource")
    @configurationproperties(prefix = "spring.datasource.two")
    public datasource getdatesourcetwo(datasourceproperties properties) {
        return datasourcebuilder.create(properties.getclassloader())
                .type(hikaridatasource.class)
                .driverclassname(properties.determinedriverclassname())
                .url(properties.determineurl())
                .username(properties.determineusername())
                .password(properties.determinepassword())
                .build();
    }
    
    @bean(name = "twosqlsessionfactory")
    public sqlsessionfactory twosqlsessionfactory(@qualifier("twodatasource") datasource datasource)
            throws exception {
        sqlsessionfactorybean bean = new sqlsessionfactorybean();
        bean.setdatasource(datasource);
        bean.setmapperlocations(
                new pathmatchingresourcepatternresolver().getresources("classpath*:mapper/two/*.xml"));
        return bean.getobject();
    }
    
    @bean("twosqlsessiontemplate")
    public sqlsessiontemplate twosqlsessiontemplate(
            @qualifier("twosqlsessionfactory") sqlsessionfactory sessionfactory) {
        return new sqlsessiontemplate(sessionfactory);
    }
}

三、实体类

两个数据源公用一个实体类

public class bootuser {
    private string id;
    private string name;
    private string detail;

    public string getid() {
        return id;
    }

    public void setid(string id) {
        this.id = id;
    }

    public string getname() {
        return name;
    }

    public void setname(string name) {
        this.name = name;
    }

    public string getdetail() {
        return detail;
    }

    public void setdetail(string detail) {
        this.detail = detail;
    }
}

四、新增mapper.xml文件

数据源一:在src/main/resources/mapper/one(不存在文件加新建)创建bootuseronemapper.xml文件,具体配置信息如下:

<?xml version="1.0" encoding="utf-8" ?>
<!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yoodb.study.demo03.mapper.one.bootuseronemapper" >
    <resultmap id="baseresultmap" type="com.yoodb.study.demo03.bean.bootuser" >
        <id column="id" property="id" jdbctype="varchar" />
        <result column="user_name" property="name" jdbctype="varchar" />
        <result column="detail" property="detail" jdbctype="varchar" />
    </resultmap>

    <select id="selectall" resultmap="baseresultmap">
    select
         id, user_name, detail
    from boot_user order by detail asc
    </select>
</mapper>

数据源二:在src/main/resources/mapper/two(不存在文件加新建)创建bootusertwomapper.xml文件,具体配置信息如下:

<?xml version="1.0" encoding="utf-8" ?>
<!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yoodb.study.demo03.mapper.two.bootusertwomapper" >
    <resultmap id="baseresultmap" type="com.yoodb.study.demo03.bean.bootuser" >
        <id column="id" property="id" jdbctype="varchar" />
        <result column="user_name" property="name" jdbctype="varchar" />
        <result column="detail" property="detail" jdbctype="varchar" />
    </resultmap>

    <select id="selectall" resultmap="baseresultmap">
    select
         id, user_name, detail
    from boot_user order by detail asc
    </select>
</mapper>

五、新增接口文件

数据源一:mapper接口类文件,具体代码如下:

public interface bootuseronemapper {
    list<bootuser> selectall();
}

数据源二:mapper接口类文件,具体代码如下:

public interface bootusertwomapper {
    list<bootuser> selectall();
}

六、创建service/controller

@service
public class bootuserservice {
    
    @autowired
    private bootuseronemapper onemapper;

    @autowired
    private bootusertwomapper twomapper;

    public list<bootuser> getusers(){
        list<bootuser> listone = onemapper.selectall();
        list<bootuser> listtwo = twomapper.selectall();
        listone.addall(listtwo);
        return listone;
    }
}
@restcontroller
@requestmapping("/myt")
public class bootusercontroller {
    @autowired
    private bootuserservice service;

    @requestmapping("/getusers")
    public list<bootuser> getusers() {
        list<bootuser> list = service.getusers();
        return list;
    }

}

项目启动过程中控制台报错,错误信息如下:

解决方法:就是在pom.xml文件中增加如下配置信息:

<resources>
	<resource>
		<!-- 指定resources插件处理哪个目录下的资源文件 -->
		<directory>src/main/resources</directory>
		<includes>
			<include>**/**</include>
		</includes>
	</resource>
</resources>

http://localhost:8080/myt/getusers

解决方案

将application.properties文件中spring.datasource…url和spring.datasource…driverclassname分别替换成spring.datasource…jdbc-url和spring.datasource…driver-class-name。

spring boot源码分析:

1)spring.datasource..url替换成spring.datasource..jdbcurl也没有任何问题。

源码org.springframework.boot.jdbc包中databasedriver.class文件反编译后,发现url参数必须以“jdbc”开始,具体源码如下:

public static databasedriver fromjdbcurl(string url) {
	if (stringutils.haslength(url)) {
		assert.istrue(url.startswith("jdbc"), "url must start with 'jdbc'");
		string urlwithoutprefix = url.substring("jdbc".length()).tolowercase(locale.english);
		databasedriver[] var2 = values();
		int var3 = var2.length;

		for(int var4 = 0; var4 < var3; ++var4) {
			databasedriver driver = var2[var4];
			iterator var6 = driver.geturlprefixes().iterator();

			while(var6.hasnext()) {
				string urlprefix = (string)var6.next();
				string prefix = ":" + urlprefix + ":";
				if (driver != unknown && urlwithoutprefix.startswith(prefix)) {
					return driver;
				}
			}
		}
	}

	return unknown;
}

2)spring.datasource.*.driverclassname不替换也没有影响。

源码org.springframework.boot.autoconfigure.jdbc包中configurationproperties.class文件反编译后,发现属性即为driverclassname字段,具体源码如下:

public string determinedriverclassname() {
	if (stringutils.hastext(this.driverclassname)) {
		assert.state(this.driverclassisloadable(), () -> {
			return "cannot load driver class: " + this.driverclassname;
		});
		return this.driverclassname;
	} else {
	...

修改application.properties文件配置,参考信息如下:

spring.datasource.one.jdbc-url=jdbc:mysql://123.57.47.154:3306/springboot1
spring.datasource.one.username=root
spring.datasource.one.password=wangyoodb
spring.datasource.one.driver-class-name=com.mysql.cj.jdbc.driver

spring.datasource.two.jdbc-url=jdbc:mysql://123.57.47.154:3306/springboot2
spring.datasource.two.username=root
spring.datasource.two.password=wangyoodb
spring.datasource.two.driver-class-name=com.mysql.cj.jdbc.driver

使用jdbctemplate

@restcontroller
@requestmapping("/jte")
public class jdbctemplatecontroller {
    @autowired
    private jdbctemplate onesqlsessiontemplate;

    @autowired
    private jdbctemplate twosqlsessiontemplate;

    @requestmapping("/getoneusers")
    public list<map<string, object>> getoneusers(){
        string sql = "select * from boot_user";
        list<map<string, object>> list =  twosqlsessiontemplate.queryforlist(sql);
        for (map<string, object> map : list) {
            set<entry<string, object>> entries = map.entryset( );
            if(entries != null) {
                iterator<entry<string, object>> iterator = entries.iterator( );
                while(iterator.hasnext( )) {
                    entry<string, object> entry =(entry<string, object>) iterator.next( );
                    object key = entry.getkey( );
                    object value = entry.getvalue();
                    system.out.println(key+":"+value);
                }
            }
        }
        return list;
    }

    @requestmapping("/gettwousers")
    public list<bootuser> gettwousers() {
        list<bootuser> list = twosqlsessiontemplate.query("select id,user_name " +
                "name,detail from boot_user", new beanpropertyrowmapper<>(bootuser.class));
        return list;
    }
    
}

多数据源配置文件、多数据源类文件、实体类文件、controller层创建完成后,目录如图:

项目启动后访问多数据源一请求地址:

http://localhost:8080/jte/getoneusers

通过浏览器访问输出如下信息:

[{"id":1,"user_name":"素文宅博客","password":"e10adc3949ba59abbe56e057f20f883e","role_name":"素文宅博客","detail":"欢迎关注“java精选”微信公众号,专注程序员推送一些java开发知识,包括基础知识、各大流行框架(mybatis、spring、spring boot等)、大数据技术(storm、hadoop、mapreduce、spark等)、数据库(mysql、oracle、nosql等)、算法与数据结构、面试专题、面试技巧经验、职业规划以及优质开源项目等。"}]

项目启动后访问多数据源二请求地址:

http://localhost:8080/jte/gettwousers

通过浏览器访问输出如下信息:

[{"id":"1","name":"素文宅博客","detail":"欢迎关注“java精选”微信公众号,专注程序员推送一些java开发知识,包括基础知识、各大流行框架(mybatis、spring、spring boot等)、大数据技术(storm、hadoop、mapreduce、spark等)、数据库(mysql、oracle、nosql等)、算法与数据结构、面试专题、面试技巧经验、职业规划以及优质开源项目等。"}]

spring容器中jdbctemplate提供了两种注入方式,一种是使用@resource注解,直接通过byname的方式注入进来,另外一种就是@autowired注解加上@qualifier注解,两者联合起来,实际上也是byname。

将jdbctemplate注入成功后,onesqlsessiontemplate和twosqlsessiontemplate此时就代表操作不同的数据源,使用不同的jdbctemplate操作不同的数据源,实现了多数据源配置。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com