HiveJDBC与其他JDBC一起使用时出现java.lang.IllegalArgumentException: Bad URL format

本文介绍了一个关于在Java程序中同时使用Hive和MySQL数据库时遇到的问题及解决方案。当通过JDBC访问MySQL时,由于Hive JDBC驱动的不当实现导致出现BadURLformat异常。文中提供了两种解决方法:一是升级到新版本的Hive JDBC驱动;二是修改获取连接的方法。

问题描述:

程序中需要使用JDBC的方式同时访问Hive和MySQL,发现在获取MySQL连接的时候(DriverManager.getConnection方法)出现Hive的类中的Bad URL format异常。

代码如下:

 public Connection getMySqlConn() {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(ConstantUtil.mysqlUrl, ConstantUtil.mysqlUsername, ConstantUtil.mysqlPassword);
        } catch (ClassNotFoundException e) {
            logger.error(e.getMessage(), e);
        } catch (SQLException e) {
            logger.error(e.getMessage(), e);
        }
        return conn;
    }

异常如下:

java.lang.IllegalArgumentException: Bad URL format
        at org.apache.hive.jdbc.Utils.parseURL(Utils.java:185)
        at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:84)
        at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:104)
        at java.sql.DriverManager.getConnection(DriverManager.java:664)
        at java.sql.DriverManager.getConnection(DriverManager.java:247)
        at com.xxx.util.MySqlUtil.getMySqlConn(MySqlUtil.java:33)
        at com.xxx.interceptor.TransformInterceptor.refreshApp(TransformInterceptor.java:151)
        at com.xxx.interceptor.TransformInterceptor.initialize(TransformInterceptor.java:42)
        at org.apache.flume.interceptor.InterceptorChain.initialize(InterceptorChain.java:74)
        at org.apache.flume.channel.ChannelProcessor.initialize(ChannelProcessor.java:68)
        at org.apache.flume.source.PollableSourceRunner.start(PollableSourceRunner.java:70)
        at org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:249)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

原因分析:

DriverManager.getConnection方法会使用url去尝试访问每个注册的JDBCDriver的connect方法,而JDBC的规范中要求该方法要判断url是否能够处理,不能处理要返回null。
然而,hive-jdbc在0.11.0版本中(具体受影响的版本范围未分析),调用其connect方法时,在url前缀非hive的情况下,是直接抛出IllegalArgumentException,而这个异常DriverManager并不会捕获,导致程序直接报错,不再尝试正确的MySQL的Driver。

解决办法:

(1)新版本的HiveJdbcDriver已修改这个问题。即先判断url前缀是否可以处理(处理不了返回null),并且将parseURL的异常修改为SQLException的子类(DriverManager会捕获)。
(2)将调用的代码改为,先获取你需要的Driver,再调用具体Driver的connect方法,这样DriverManager就不会去尝试调用每个Driver的connect方法了。代码如下:

public Connection getMySqlConn() {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Driver driver = DriverManager.getDriver(ConstantUtil.mysqlUrl);
            java.util.Properties info = new java.util.Properties();
            info.put("user", ConstantUtil.mysqlUsername);
            info.put("password", ConstantUtil.mysqlPassword);
            conn = driver.connect(ConstantUtil.mysqlUrl, info);
        } catch (ClassNotFoundException e) {
            logger.error(e.getMessage(), e);
        } catch (SQLException e) {
            logger.error(e.getMessage(), e);
        }
        return conn;
    }
com.longshare.ta.common.exception.TaException: java.lang.RuntimeException: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:738) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:768) at com.longshare.datasource.io.support.rdf.TextRdfFileUtil.fetchFileBodyChunkListFromExecuteLog(TextRdfFileUtil.java:450) at com.longshare.datasource.io.support.rdf.TextRdfFileUtil.exportFragmentedHugeFile(TextRdfFileUtil.java:717) at com.longshare.datasource.io.support.handler.TxtExportHandler.ioHandleHugeFile(TxtExportHandler.java:511) at com.longshare.ta.io.support.export.TzjyAssetchgExp.ioHandle(TzjyAssetchgExp.java:107) at com.longshare.datasource.io.support.thread.IOCallable.ioCallAble(IOCallable.java:195) at com.longshare.datasource.io.support.thread.IOCallable.call(IOCallable.java:85) at com.longshare.datasource.io.support.thread.IOCallable.call(IOCallable.java:38) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:26
05-16
"E:\buka resource\Tomcat 9.0\Tomcat 9.0\bin\catalina.bat" run [2025-09-15 02:17:00,236] Artifact 9.14_homework:war: Waiting for server connection to start artifact deployment... Using CATALINA_BASE: "C:\Users\asus\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat\571f7d60-cc7b-4657-a774-118f50351c2c" Using CATALINA_HOME: "E:\buka resource\Tomcat 9.0\Tomcat 9.0" Using CATALINA_TMPDIR: "E:\buka resource\Tomcat 9.0\Tomcat 9.0\temp" Using JRE_HOME: "C:\Program Files\Java\jdk1.8.0_211" Using CLASSPATH: "E:\buka resource\Tomcat 9.0\Tomcat 9.0\bin\bootstrap.jar;E:\buka resource\Tomcat 9.0\Tomcat 9.0\bin\tomcat-juli.jar" Using CATALINA_OPTS: "" Connected to the target VM, address: '127.0.0.1:59280', transport: 'socket' 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.服务器版本: Apache Tomcat/9.0.54 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器构建: Sep 28 2021 13:51:49 UTC 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器版本号: 9.0.54.0 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 操作系统名称: Windows 10 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS.版本: 10.0 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 架构: amd64 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java 环境变量: C:\Program Files\Java\jdk1.8.0_211\jre 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java虚拟机版本: 1.8.0_211-b12 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM.供应商: Oracle Corporation 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: C:\Users\asus\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat\571f7d60-cc7b-4657-a774-118f50351c2c 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: E:\buka resource\Tomcat 9.0\Tomcat 9.0 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djava.util.logging.config.file=C:\Users\asus\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat\571f7d60-cc7b-4657-a774-118f50351c2c\conf\logging.properties 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59280,suspend=y,server=n 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -javaagent:C:\Users\asus\AppData\Local\JetBrains\IntelliJIdea2021.1\captureAgent\debugger-agent.jar 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcom.sun.management.jmxremote= 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcom.sun.management.jmxremote.port=1099 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcom.sun.management.jmxremote.ssl=false 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcom.sun.management.jmxremote.password.file=C:\Users\asus\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat\571f7d60-cc7b-4657-a774-118f50351c2c\jmxremote.password 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcom.sun.management.jmxremote.access.file=C:\Users\asus\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat\571f7d60-cc7b-4657-a774-118f50351c2c\jmxremote.access 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djava.rmi.server.hostname=127.0.0.1 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djdk.tls.ephemeralDHKeySize=2048 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dignore.endorsed.dirs= 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcatalina.base=C:\Users\asus\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat\571f7d60-cc7b-4657-a774-118f50351c2c 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcatalina.home=E:\buka resource\Tomcat 9.0\Tomcat 9.0 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djava.io.tmpdir=E:\buka resource\Tomcat 9.0\Tomcat 9.0\temp 15-Sep-2025 14:17:01.205 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 在java.library.path:[C:\Program Files\Java\jdk1.8.0_211\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Microsoft SQL Server\150\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Program Files\dotnet\;D:\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\Bandizip\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;E:\MYSql\mysql-8.0.30-winx64\bin;D:\app\mysql xx\bc\bin;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Users\asus\AppData\Local\Microsoft\WindowsApps;C:\Users\asus\.dotnet\tools;D:\app\idea\IntelliJ IDEA 2023.3.4\bin;;;.]上找不到基于APR的Apache Tomcat本机库,该库允许在生产环境中获得最佳性能 15-Sep-2025 14:17:01.380 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["http-nio-8080"] 15-Sep-2025 14:17:01.380 信息 [main] org.apache.catalina.startup.Catalina.load 服务器在[333]毫秒内初始化 15-Sep-2025 14:17:01.411 信息 [main] org.apache.catalina.core.StandardService.startInternal 正在启动服务[Catalina] 15-Sep-2025 14:17:01.411 信息 [main] org.apache.catalina.core.StandardEngine.startInternal 正在启动 Servlet 引擎:[Apache Tomcat/9.0.54] 15-Sep-2025 14:17:01.417 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-nio-8080"] 15-Sep-2025 14:17:01.427 信息 [main] org.apache.catalina.startup.Catalina.start [40]毫秒后服务器启动 Connected to server [2025-09-15 02:17:01,807] Artifact 9.14_homework:war: Artifact is being deployed, please wait... 15-Sep-2025 14:17:04.092 信息 [RMI TCP Connection(3)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动间和JSP编译间。 14:17:04.188 [RMI TCP Connection(3)-127.0.0.1] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started 14:17:04.267 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.web.context.support.XmlWebApplicationContext - Refreshing Root WebApplicationContext 14:17:04.457 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [E:\buka resource\Tomcat 9.0\Tomcat 9.0\webapps\ROOT\WEB-INF\classes\com\buka\service\ClassService.class] 14:17:04.457 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [E:\buka resource\Tomcat 9.0\Tomcat 9.0\webapps\ROOT\WEB-INF\classes\com\buka\service\StuService.class] 14:17:04.489 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loaded 11 bean definitions from class path resource [application.xml] 14:17:04.537 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor' 14:17:04.584 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.mybatis.spring.mapper.MapperScannerConfigurer#0' 14:17:04.631 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.apache.ibatis.logging.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter. 14:17:04.631 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.mybatis.spring.mapper.ClassPathMapperScanner - Identified candidate component class: file [E:\buka resource\Tomcat 9.0\Tomcat 9.0\webapps\ROOT\WEB-INF\classes\com\buka\dao\ClassDao.class] 14:17:04.631 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.mybatis.spring.mapper.ClassPathMapperScanner - Identified candidate component class: file [E:\buka resource\Tomcat 9.0\Tomcat 9.0\webapps\ROOT\WEB-INF\classes\com\buka\dao\Studao.class] 14:17:04.631 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.mybatis.spring.mapper.ClassPathMapperScanner - Creating MapperFactoryBean with name 'classDao' and 'com.buka.dao.ClassDao' mapperInterface 14:17:04.631 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.mybatis.spring.mapper.ClassPathMapperScanner - Creating MapperFactoryBean with name 'studao' and 'com.buka.dao.Studao' mapperInterface 14:17:04.647 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.support.PropertySourcesPlaceholderConfigurer#0' 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/jdbc.driver] 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiLocatorDelegate - Converted JNDI name [java:comp/env/jdbc.driver] not found - trying original name [jdbc.driver]. javax.naming.NameNotFoundException: 名称[jdbc.driver]未在此上下文中绑定。找不到[jdbc.driver]。 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [jdbc.driver] 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiPropertySource - JNDI lookup for name [jdbc.driver] threw NamingException with message: 名称[jdbc.driver]未在此上下文中绑定。找不到[jdbc.driver]。. Returning null. 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'jdbc.driver' in PropertySource 'localProperties' with value of type String 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/jdbc.password] 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiLocatorDelegate - Converted JNDI name [java:comp/env/jdbc.password] not found - trying original name [jdbc.password]. javax.naming.NameNotFoundException: 名称[jdbc.password]未在此上下文中绑定。找不到[jdbc.password]。 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [jdbc.password] 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiPropertySource - JNDI lookup for name [jdbc.password] threw NamingException with message: 名称[jdbc.password]未在此上下文中绑定。找不到[jdbc.password]。. Returning null. 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'jdbc.password' in PropertySource 'localProperties' with value of type String 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/jdbc.url] 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiLocatorDelegate - Converted JNDI name [java:comp/env/jdbc.url] not found - trying original name [jdbc.url]. javax.naming.NameNotFoundException: 名称[jdbc.url]未在此上下文中绑定。找不到[jdbc.url]。 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [jdbc.url] 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiPropertySource - JNDI lookup for name [jdbc.url] threw NamingException with message: 名称[jdbc.url]未在此上下文中绑定。找不到[jdbc.url]。. Returning null. 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'jdbc.url' in PropertySource 'localProperties' with value of type String 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/jdbc.username] 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiLocatorDelegate - Converted JNDI name [java:comp/env/jdbc.username] not found - trying original name [jdbc.username]. javax.naming.NameNotFoundException: 名称[jdbc.username]未在此上下文中绑定。找不到[jdbc.username]。 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [jdbc.username] 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiPropertySource - JNDI lookup for name [jdbc.username] threw NamingException with message: 名称[jdbc.username]未在此上下文中绑定。找不到[jdbc.username]。. Returning null. 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'jdbc.username' in PropertySource 'localProperties' with value of type String 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerProcessor' 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory' 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor' 14:17:04.663 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor' 14:17:04.679 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.ui.context.support.UiApplicationContextUtils - Unable to locate ThemeSource with name 'themeSource': using default [org.springframework.ui.context.support.ResourceBundleThemeSource@3a0a0d1e] 14:17:04.679 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'classService' 14:17:04.710 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'classDao' 14:17:04.726 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'sqlsessionFactory' 14:17:04.726 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'dataSource' Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter. 14:17:04.901 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.mybatis.spring.SqlSessionFactoryBean - Parsed configuration file: 'class path resource [mybatis-config.xml]' 14:17:04.965 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.mybatis.spring.SqlSessionFactoryBean - Parsed mapper file: 'file [E:\buka resource\Tomcat 9.0\Tomcat 9.0\webapps\ROOT\WEB-INF\classes\mapper\ClassMapper.xml]' 14:17:04.965 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.mybatis.spring.SqlSessionFactoryBean - Parsed mapper file: 'file [E:\buka resource\Tomcat 9.0\Tomcat 9.0\webapps\ROOT\WEB-INF\classes\mapper\StuMapper.xml]' 14:17:04.981 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'stuService' 14:17:04.981 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'studao' 14:17:05.020 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/spring.liveBeansView.mbeanDomain] 14:17:05.020 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiLocatorDelegate - Converted JNDI name [java:comp/env/spring.liveBeansView.mbeanDomain] not found - trying original name [spring.liveBeansView.mbeanDomain]. javax.naming.NameNotFoundException: 名称[spring.liveBeansView.mbeanDomain]未在此上下文中绑定。找不到[spring.liveBeansView.mbeanDomain]。 14:17:05.020 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [spring.liveBeansView.mbeanDomain] 14:17:05.020 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.jndi.JndiPropertySource - JNDI lookup for name [spring.liveBeansView.mbeanDomain] threw NamingException with message: 名称[spring.liveBeansView.mbeanDomain]未在此上下文中绑定。找不到[spring.liveBeansView.mbeanDomain]。. Returning null. 14:17:05.020 [RMI TCP Connection(3)-127.0.0.1] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext initialized in 832 ms 14:17:05.028 [RMI TCP Connection(3)-127.0.0.1] DEBUG org.springframework.web.filter.CharacterEncodingFilter - Filter 'charset' configured for use [2025-09-15 02:17:05,044] Artifact 9.14_homework:war: Artifact is deployed successfully [2025-09-15 02:17:05,044] Artifact 9.14_homework:war: Deploy took 3,237 milliseconds 14:17:06.043 [http-nio-8080-exec-2] INFO org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'springMVC' 14:17:06.043 [http-nio-8080-exec-2] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/spring.profiles.active] 14:17:06.043 [http-nio-8080-exec-2] DEBUG org.springframework.jndi.JndiLocatorDelegate - Converted JNDI name [java:comp/env/spring.profiles.active] not found - trying original name [spring.profiles.active]. javax.naming.NameNotFoundException: 名称[spring.profiles.active]未在此上下文中绑定。找不到[spring.profiles.active]。 14:17:06.043 [http-nio-8080-exec-2] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [spring.profiles.active] 14:17:06.043 [http-nio-8080-exec-2] DEBUG org.springframework.jndi.JndiPropertySource - JNDI lookup for name [spring.profiles.active] threw NamingException with message: 名称[spring.profiles.active]未在此上下文中绑定。找不到[spring.profiles.active]。. Returning null. 14:17:06.043 [http-nio-8080-exec-2] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/spring.profiles.default] 14:17:06.043 [http-nio-8080-exec-2] DEBUG org.springframework.jndi.JndiLocatorDelegate - Converted JNDI name [java:comp/env/spring.profiles.default] not found - trying original name [spring.profiles.default]. javax.naming.NameNotFoundException: 名称[spring.profiles.default]未在此上下文中绑定。找不到[spring.profiles.default]。 14:17:06.043 [http-nio-8080-exec-2] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [spring.profiles.default] 14:17:06.043 [http-nio-8080-exec-2] DEBUG org.springframework.jndi.JndiPropertySource - JNDI lookup for name [spring.profiles.default] threw NamingException with message: 名称[spring.profiles.default]未在此上下文中绑定。找不到[spring.profiles.default]。. Returning null. 14:17:06.043 [http-nio-8080-exec-2] DEBUG org.springframework.web.context.support.XmlWebApplicationContext - Refreshing WebApplicationContext for namespace 'springMVC-servlet' 14:17:06.073 [http-nio-8080-exec-2] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [E:\buka resource\Tomcat 9.0\Tomcat 9.0\webapps\ROOT\WEB-INF\classes\com\buka\controller\ClassController.class] 14:17:06.073 [http-nio-8080-exec-2] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [E:\buka resource\Tomcat 9.0\Tomcat 9.0\webapps\ROOT\WEB-INF\classes\com\buka\controller\StuController.class] 14:17:06.120 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loaded 26 bean definitions from class path resource [springmvc-config.xml] 14:17:06.120 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor' 14:17:06.170 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerProcessor' 14:17:06.170 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory' 14:17:06.170 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor' 14:17:06.170 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor' 14:17:06.170 [http-nio-8080-exec-2] DEBUG org.springframework.ui.context.support.UiApplicationContextUtils - Unable to locate ThemeSource with name 'themeSource': using default [org.springframework.ui.context.support.DelegatingThemeSource@2e74de95] 14:17:06.170 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'classController' 14:17:06.170 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'stuController' 14:17:06.170 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'mvcContentNegotiationManager' 14:17:06.183 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping' 14:17:06.231 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'mvcCorsConfigurations' 14:17:06.231 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.web.servlet.handler.MappedInterceptor#0' 14:17:06.231 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.format.support.FormattingConversionServiceFactoryBean#0' 14:17:06.320 [http-nio-8080-exec-2] DEBUG _org.springframework.web.servlet.HandlerMapping.Mappings - c.b.c.ClassController: { [/menu]}: index(Clazz,ModelAndView) { [/addClass]}: addClass(Clazz,ModelAndView) { [/]}: home() 14:17:06.325 [http-nio-8080-exec-2] DEBUG _org.springframework.web.servlet.HandlerMapping.Mappings - c.b.c.StuController: { [/addStu]}: addStu(Student,ModelAndView) 14:17:06.325 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 4 mappings in 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping' 14:17:06.325 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter' 14:17:06.373 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter - ControllerAdvice beans: none 14:17:06.420 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'mvcUriComponentsContributor' 14:17:06.420 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter - ControllerAdvice beans: none 14:17:06.420 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver#0' 14:17:06.436 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - ControllerAdvice beans: none 14:17:06.436 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver#0' 14:17:06.436 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver#0' 14:17:06.436 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping' 14:17:06.452 [http-nio-8080-exec-2] DEBUG _org.springframework.web.servlet.HandlerMapping.Mappings - 'org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping' {} 14:17:06.452 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter' 14:17:06.452 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter' 14:17:06.452 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'localeResolver' 14:17:06.452 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'themeResolver' 14:17:06.452 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'viewNameTranslator' 14:17:06.452 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'flashMapManager' 14:17:06.452 [http-nio-8080-exec-2] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'multipartResolver' 14:17:06.468 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.DispatcherServlet - Detected CommonsMultipartResolver 14:17:06.468 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.DispatcherServlet - Detected AcceptHeaderLocaleResolver 14:17:06.468 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.DispatcherServlet - Detected FixedThemeResolver 14:17:06.468 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.DispatcherServlet - Detected org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@2bd4fa16 14:17:06.468 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.DispatcherServlet - Detected org.springframework.web.servlet.support.SessionFlashMapManager@53592927 14:17:06.468 [http-nio-8080-exec-2] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/spring.liveBeansView.mbeanDomain] 14:17:06.468 [http-nio-8080-exec-2] DEBUG org.springframework.jndi.JndiLocatorDelegate - Converted JNDI name [java:comp/env/spring.liveBeansView.mbeanDomain] not found - trying original name [spring.liveBeansView.mbeanDomain]. javax.naming.NameNotFoundException: 名称[spring.liveBeansView.mbeanDomain]未在此上下文中绑定。找不到[spring.liveBeansView.mbeanDomain]。 14:17:06.468 [http-nio-8080-exec-2] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [spring.liveBeansView.mbeanDomain] 14:17:06.468 [http-nio-8080-exec-2] DEBUG org.springframework.jndi.JndiPropertySource - JNDI lookup for name [spring.liveBeansView.mbeanDomain] threw NamingException with message: 名称[spring.liveBeansView.mbeanDomain]未在此上下文中绑定。找不到[spring.liveBeansView.mbeanDomain]。. Returning null. 14:17:06.468 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.DispatcherServlet - enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data 14:17:06.468 [http-nio-8080-exec-2] INFO org.springframework.web.servlet.DispatcherServlet - Completed initialization in 425 ms 14:17:06.492 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/menu", parameters={} 14:17:06.496 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped to com.buka.controller.ClassController#index(Clazz, ModelAndView) Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@50162767] was not registered for synchronization because synchronization is not active 14:17:06.548 [http-nio-8080-exec-2] DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource 14:17:06.594 [http-nio-8080-exec-2] INFO com.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@d2e8721] will not be managed by Spring ==> Preparing: select cid,cname,teacher from class ==> Parameters: <== Columns: cid, cname, teacher <== Row: 1, 1班, zhangsan <== Row: 19, 2班, lisi <== Total: 2 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@50162767] 14:17:07.225 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.view.JstlView - View name 'menu.jsp', model {clazz=Clazz{cid=0, cname='null', teacher='null'}, org.springframework.validation.BindingResult.clazz=org.springframework.validation.BeanPropertyBindingResult: 0 errors, modelAndView=ModelAndView [view="menu.jsp"; model={classist=[Clazz{cid=1, cname='1班', teacher='zhangsan'}, Clazz{cid=19, cname='2班', teacher='lisi'}]}], org.springframework.validation.BindingResult.modelAndView=org.springframework.validation.BeanPropertyBindingResult: 0 errors, classist=[Clazz{cid=1, cname='1班', teacher='zhangsan'}, Clazz{cid=19, cname='2班', teacher='lisi'}]} 14:17:07.243 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.view.JstlView - Forwarding to [menu.jsp] 14:17:07.370 [http-nio-8080-exec-2] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK 14:17:07.386 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/menu", parameters={} 14:17:07.386 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped to com.buka.controller.ClassController#index(Clazz, ModelAndView) Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@726f97db] was not registered for synchronization because synchronization is not active 14:17:07.386 [http-nio-8080-exec-4] DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@d2e8721] will not be managed by Spring ==> Preparing: select cid,cname,teacher from class ==> Parameters: <== Columns: cid, cname, teacher <== Row: 1, 1班, zhangsan <== Row: 19, 2班, lisi <== Total: 2 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@726f97db] 14:17:07.386 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.view.JstlView - View name 'menu.jsp', model {clazz=Clazz{cid=0, cname='null', teacher='null'}, org.springframework.validation.BindingResult.clazz=org.springframework.validation.BeanPropertyBindingResult: 0 errors, modelAndView=ModelAndView [view="menu.jsp"; model={classist=[Clazz{cid=1, cname='1班', teacher='zhangsan'}, Clazz{cid=19, cname='2班', teacher='lisi'}]}], org.springframework.validation.BindingResult.modelAndView=org.springframework.validation.BeanPropertyBindingResult: 0 errors, classist=[Clazz{cid=1, cname='1班', teacher='zhangsan'}, Clazz{cid=19, cname='2班', teacher='lisi'}]} 14:17:07.386 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.view.JstlView - Forwarding to [menu.jsp] 14:17:07.386 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK 14:17:07.540 [http-nio-8080-exec-6] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/menu", parameters={} 14:17:07.542 [http-nio-8080-exec-6] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped to com.buka.controller.ClassController#index(Clazz, ModelAndView) Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@600acfdb] was not registered for synchronization because synchronization is not active 14:17:07.542 [http-nio-8080-exec-6] DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@d2e8721] will not be managed by Spring ==> Preparing: select cid,cname,teacher from class ==> Parameters: <== Columns: cid, cname, teacher <== Row: 1, 1班, zhangsan <== Row: 19, 2班, lisi <== Total: 2 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@600acfdb] 14:17:07.547 [http-nio-8080-exec-6] DEBUG org.springframework.web.servlet.view.JstlView - View name 'menu.jsp', model {clazz=Clazz{cid=0, cname='null', teacher='null'}, org.springframework.validation.BindingResult.clazz=org.springframework.validation.BeanPropertyBindingResult: 0 errors, modelAndView=ModelAndView [view="menu.jsp"; model={classist=[Clazz{cid=1, cname='1班', teacher='zhangsan'}, Clazz{cid=19, cname='2班', teacher='lisi'}]}], org.springframework.validation.BindingResult.modelAndView=org.springframework.validation.BeanPropertyBindingResult: 0 errors, classist=[Clazz{cid=1, cname='1班', teacher='zhangsan'}, Clazz{cid=19, cname='2班', teacher='lisi'}]} 14:17:07.549 [http-nio-8080-exec-6] DEBUG org.springframework.web.servlet.view.JstlView - Forwarding to [menu.jsp] 14:17:07.549 [http-nio-8080-exec-6] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK 15-Sep-2025 14:17:11.430 信息 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [E:\buka resource\Tomcat 9.0\Tomcat 9.0\webapps\manager] 14:17:11.459 [http-nio-8080-exec-9] DEBUG org.springframework.web.servlet.DispatcherServlet - POST "/addStu", parameters={masked} 14:17:11.461 [http-nio-8080-exec-9] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped to com.buka.controller.StuController#addStu(Student, ModelAndView) 14:17:11.469 [http-nio-8080-exec-9] DEBUG org.springframework.web.method.HandlerMethod - Could not resolve parameter [0] in public org.springframework.web.servlet.ModelAndView com.buka.controller.StuController.addStu(com.buka.po.Student,org.springframework.web.servlet.ModelAndView): org.springframework.validation.BeanPropertyBindingResult: 1 errors Field error in object 'student' on field 'sid': rejected value [null]; codes [typeMismatch.student.sid,typeMismatch.sid,typeMismatch.int,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.sid,sid]; arguments []; default message [sid]]; default message [Failed to convert value of type 'null' to required type 'int'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [null] to type [int] for value 'null'; nested exception is java.lang.IllegalArgumentException: A null value cannot be assigned to a primitive type] 14:17:11.472 [http-nio-8080-exec-9] WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolved [org.springframework.web.method.annotation.ModelAttributeMethodProcessor$1: org.springframework.validation.BeanPropertyBindingResult: 1 errors<EOL>Field error in object 'student' on field 'sid': rejected value [null]; codes [typeMismatch.student.sid,typeMismatch.sid,typeMismatch.int,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.sid,sid]; arguments []; default message [sid]]; default message [Failed to convert value of type 'null' to required type 'int'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [null] to type [int] for value 'null'; nested exception is java.lang.IllegalArgumentException: A null value cannot be assigned to a primitive type]] 14:17:11.472 [http-nio-8080-exec-9] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 400 BAD_REQUEST 15-Sep-2025 14:17:11.490 信息 [Catalina-utility-1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动间和JSP编译间。 15-Sep-2025 14:17:11.492 信息 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[E:\buka resource\Tomcat 9.0\Tomcat 9.0\webapps\manager]的部署已在[62]毫秒内完成
09-16
<think> 我们正在处理的是配置Spring Boot多数据源出现的`java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName`错误。根据引用内容,问题通常出现在数据源配置的URL属性上。 ## 问题原因分析 在Spring Boot中,当配置数据源,我们通常使用`spring.datasource.url`来指定数据库连接地址。然而,在配置多数据源,如果使用了自定义的数据源配置(比如使用`@ConfigurationProperties`绑定属性到多个数据源),则需要注意属性名的匹配。 根据引用[2]和引用[3]的内容,错误是因为在配置多数据源,Spring Boot期望使用`jdbc-url`而不是`url`。这是因为在较低版本的Spring Boot中,我们使用`url`,但在高版本中(尤其是当使用自定义连接池)需要改为`jdbc-url`。 ## 解决方案 ### 1. 修改配置属性 将配置文件中数据源的`url`属性改为`jdbc-url`。例如: **原配置(错误)**: ```yaml spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/mydb username: root password: root ``` **修改后配置(正确)**: ```yaml spring: datasource: driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/mydb # 注意这里改为jdbc-url username: root password: root ``` ### 2. 多数据源配置示例 当配置多个数据源,通常需要为每个数据源分别指定配置。以下是一个典型的多数据源配置类: ```java @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource.first") public DataSource firstDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.second") public DataSource secondDataSource() { return DataSourceBuilder.create().build(); } } ``` 对应的配置文件(如`application.yml`)应如下: ```yaml spring: datasource: first: driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/first_db username: user1 password: pass1 second: driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/second_db username: user2 password: pass2 ``` ### 3. 注意事项 - **驱动类名**:确保`driver-class-name`正确,例如MySQL 8.x通常使用`com.mysql.cj.jdbc.Driver`。 - **连接参数**:在URL中可能需要指定区等参数,例如:`jdbc:mysql://localhost:3306/db?serverTimezone=UTC`。 - **连接池**:如果使用如HikariCP等连接池,使用`jdbc-url`是必须的,因为`url`属性不被HikariCP直接支持[^2][^3]。 ## 验证 启动应用程序,检查是否还会出现同样的异常。如果配置正确,应用程序应该能够正常启动,并且数据源被成功创建。 ## 相关问题 1. 如何在Spring Boot中配置多个数据源? 2. Spring Boot中如何选择不同的数据库连接池? 3. 如何解决多数据源下的事务管理问题? 4. 在Spring Boot 2.x中配置数据源有哪些变化? 5. 如何为不同的数据源配置不同的JPA实体管理器? 通过以上步骤,应该能够解决`java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName`错误。如果问题仍然存在,请检查Spring Boot版本以及是否引入了正确的连接池依赖[^2][^3]。 </think>要解决 Spring Boot 配置多数据源出现的 `java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName` 错误,请按照以下步骤操作: ### 🔧 解决方案步骤 #### 1. **修改配置文件属性名** 将配置中的 `spring.datasource.url` 替换为 `spring.datasource.jdbc-url` **错误配置**: ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db1 # 这是问题的根源 username: user password: pass ``` **正确配置**: ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db1 # ✅ 关键修改 username: user password: pass ``` #### 2. **多数据源配置示例** 当配置多个数据源,确保每个数据源都使用 `jdbc-url`: ```yaml # 主数据源 spring: datasource: primary: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db1 username: user1 password: pass1 # 次要数据源 secondary: driver-class-name: org.postgresql.Driver jdbc-url: jdbc:postgresql://localhost:5432/db2 username: user2 password: pass2 ``` #### 3. **Java 配置类修正** 在数据源配置类中,确保绑定正确的属性前缀: ```java @Configuration public class DataSourceConfig { // 主数据源 @Bean @ConfigurationProperties(prefix = "spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } // 次要数据源 @Bean @ConfigurationProperties(prefix = "spring.datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); } } ``` #### 4. **验证依赖版本** 检查 `pom.xml` 中的连接池依赖版本(HikariCP 需要 `jdbc-url`): ```xml <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>4.0.3</version> <!-- 推荐使用较新版本 --> </dependency> ``` ### 💡 原因分析 - **低版本 Spring Boot**:支持使用 `url` 属性 - **高版本 Spring Boot**:默认使用 HikariCP 连接池,需要 `jdbc-url` 属性 - 多数据源配置,Spring Boot 不会自动应用默认配置规则[^2][^3] ### ✅ 验证配置 启动应用检查日志: ``` o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. ``` ### ⚠️ 注意事项 1. **属性名严格匹配**:确保使用 `jdbc-url` 而非 `url` 或 `jdbcUrl` 2. **特殊字符转义**:URL 中的 `&` 需写成 `&` 3. **驱动类名更新**:MySQL 8+ 使用 `com.mysql.cj.jdbc.Driver` ### 📚 相关问题 1. 如何配置 Spring Boot 多数据源的事务管理? 2. 不同数据库方言在 JPA 多数据源中如何配置? 3. HikariCP 连接池参数优化的最佳实践? 4. 如何动态切换 Spring Boot 多数据源? 5. 多数据源环境下如何实现读写分离? > 通过上述配置修正,95% 的同类错误可解决。若问题仍存在,请检查: > - 配置文件缩进是否正确(YAML 对缩进敏感) > - 是否重复定义了数据源属性 > - 项目依赖是否存在冲突[^1][^3
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值