欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于IDEA连接tomcat 连接池的一些问题

程序员文章站 2022-03-09 23:19:51
...

基本操作
关于IDEA连接tomcat 连接池的一些问题
点击红框按钮添加context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="jdbc/mysqlds"
              auth="Container"
              type="javax.sql.DataSource"
              username="root"
              password=""
              maxIdle="30"
              maxWait="10000"
              maxActive="100"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://127.0.0.1:3306/book?useUnicode=true&characterEncoding=utf8"
              logAbandoned="true"
    />
</Context>

修改如下,其中useUnicode=true&characterEncoding=utf8是为了解决Unknown initial character set index ‘255’ received from server. 的问题,然而失败,原因是在连接池中要修改编码必须要修改tomcat中的context.xml文件,但是修改会导致tomcat服务无法顺利启动,唯一的办法就是安装旧版本的mysql(8.0之前)

关于字符集支持

重要更改:
默认字符集已从latin1变成utf8mb4。
因而系统变量受到影响:

字符集的默认值 character_set_database ,其系统变量由 latin1 变成 utf8mb4 。
而这个系统默认 collation_server 和 collocation_database 系统变量由 latin1_swedish_ci 变为 utf8mb4_0900_ai_ci

再修改web.xml,添加

<resource-ref>
        <res-ref-name>jdbc/mysqlds</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>

mysql-connector放到WEB-INF的lib下,并在library中添加,项目中导入的jar包必须放在lib目录下,否则即使添加到library中也无法使用
关于IDEA连接tomcat 连接池的一些问题
点加号选择Java,然后选择本项目lib下的mysql-connector,然后就可以测试是否连接成功了,代码如下

<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page import="javax.sql.DataSource" %>
<html>
<head>
    <title>Tomcat6.0 JNDI!</title>
</head>
<body>
Tomcat连接池测试,获取数据源 <br>
<%
    try {
        //初始化查找命名空间
        Context ctx = new InitialContext();
        //参数java:/comp/env为固定路径
        Context envContext = (Context)ctx.lookup("java:/comp/env");
        //参数jdbc/mysqlds为数据源和JNDI绑定的名字
        DataSource ds = (DataSource)envContext.lookup("jdbc/mysqlds");
        Connection conn = ds.getConnection();
        conn.close();
        out.println("<span style='color:red;'>JNDI测试成功<span>");
    } catch (NamingException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
%>
</body>
</html>

我不想安装旧版本mysql,还是放弃连接池,用Class.forName()来启动服务好了

相关的网址:
https://blog.csdn.net/TJtulong/article/details/82223535
https://www.cnblogs.com/pikaqiucode/p/8277313.html
http://www.3lian.com/edu/2013/04-06/63816.html (这个有用)