You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring JDBC报错NoClassDefFoundError及Bean无法访问问题求助

Spring JDBC操作数据库出现NoClassDefFoundError及Bean获取失败问题解决

我尝试使用Spring JDBC操作数据库,但运行时抛出NoClassDefFoundError,错误栈显示找不到org.springframework.core.metrics.ApplicationStartup类。同时分别采用XML配置和注解配置两种方式获取Bean,均无法成功访问。已添加spring-boot-starter-web 2.3.3.RELEASE依赖,相关错误信息及代码如下:

错误信息:Error :-NoClassDefFoundError

12:19:07.250 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@24b1d79b
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup
    at org.springframework.beans.factory.support.AbstractBeanFactory.<init>(AbstractBeanFactory.java:184)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.<init>(AbstractAutowireCapableBeanFactory.java:176)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.<init>(AbstractAutowireCapableBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.<init>(DefaultListableBeanFactory.java:201)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.createBeanFactory(AbstractRefreshableApplicationContext.java:197)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:127)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:638)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:523)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
    at jdbc.mainioc.main(mainioc.java:12)
Caused by: java.lang.ClassNotFoundException: org.springframework.core.metrics.ApplicationStartup
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
    ... 11 more

相关代码

XML配置方式主测试类

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

public class mainioc 
{
    public static void main(String[] args) 
    {
        ApplicationContext ctx=new ClassPathXmlApplicationContext("Appmeta.xml");
        JdbcTemplate temp= (JdbcTemplate) ctx.getBean("dataS");
        //insert query 
        String query="insert into employee(id,name,salary) values(?,?,?)";
        //fire query 
        int result=temp.update(query,3,"ram",14578);
        System.out.println("record inserted"+ result );
    }
}

当前添加的依赖

<dependency>
  org.springframework.boot
  spring-boot-starter-web
  2.3.3.RELEASE
</dependency>

实体类

package com.spjdbc.entity;

public class student 
{
 private String id;
 private String Sname;
 private String Srollno;

 @Override
public String toString() 
 {
    return "student [id=" + id + ", Sname=" + Sname + ", Srollno=" + Srollno + "]";
}
public String getId() 
{
    return id;
}
public void setId(String id) 
{
    this.id = id;
}
public String getSname() 
{
    return Sname;
}
public void setSname(String sname) 
{
    Sname = sname;
}
public String getSrollno() 
{
    return Srollno;
}
public void setSrollno(String srollno) 
{
    Srollno = srollno;
}
}

XML配置文件(Appmeta.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-4.0.xsd 
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="DataS" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/studentdb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>

<bean id="jdbcB" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="DataS"/>
</bean>

</beans>

注解方式测试类

package com.spjdbc.ioc;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

public class iocmain {
    public static void main(String[] args) 
    {
        ApplicationContext cont= new AnnotationConfigApplicationContext("com/spjdbc/ioc/BeanConf.class");
        JdbcTemplate temp= cont.getBean(JdbcTemplate.class);
        String query="insert into student(id,Sname,Srollno) values(?,?,?)";
        int result = temp.update(query,1,"ram",24001);
        System.out.println("intert the value" +result);
    }
}

注解配置类

package com.spjdbc.ioc;

import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

@Configuration
public class BeanConf 
{
    @Bean
    public DataSource dataSource() 
    {
        DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/studentdb");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        return dataSource;
    }
    
    @Bean
    public JdbcTemplate jdbcTemplate() 
    {
        return new JdbcTemplate(dataSource());
    }
}

问题解决步骤

1. 修复依赖缺失与格式问题

org.springframework.core.metrics.ApplicationStartup属于Spring Core模块,仅引入spring-boot-starter-web会缺少JDBC相关核心依赖。直接引入spring-boot-starter-jdbc,它会自动管理所有Spring JDBC所需依赖,避免版本冲突:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>

同时修正spring-boot-starter-web的依赖格式:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>

2. 补充MySQL驱动依赖

使用com.mysql.cj.jdbc.Driver需要添加MySQL驱动:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
    <scope>runtime</scope>
</dependency>

3. 修复XML配置的Bean获取错误

XML中JdbcTemplate的Bean id是jdbcB,代码中错误使用dataS获取,修改为:

JdbcTemplate temp= (JdbcTemplate) ctx.getBean("jdbcB");

4. 修复注解配置的上下文初始化错误

AnnotationConfigApplicationContext构造参数需传入配置类的Class对象,而非带.class后缀的字符串,修改为:

ApplicationContext cont= new AnnotationConfigApplicationContext(BeanConf.class);

内容的提问来源于stack exchange,提问作者Ruchi Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 17:22:32