为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用注解和基于 Java 的配置在 Spring MVC 中建立数据库连接

无法使用注解和基于 Java 的配置在 Spring MVC 中建立数据库连接

慕婉清6462132 2021-08-25 15:33:14
我正在创建一个与 MySQL 数据库建立数据库连接的 Spring MVC 应用程序。我使用过基于 Java 的配置。但我不知道为什么DataSoruce会来null。有人能告诉我哪里做错了吗?我配置前端控制器的类。public class FontControllerConfig extends AbstractAnnotationConfigDispatcherServletInitializer {    @Override    protected Class<?>[] getRootConfigClasses() {        return new Class[] { WebMvcConfig.class };    }    @Override    protected Class<?>[] getServletConfigClasses() {        return null;    }    @Override    protected String[] getServletMappings() {        return new String[] { "/" };    }}我必须启用 Spring MVC 功能的类。@Configuration@EnableWebMvc@ComponentScan(basePackages = "controller")public class WebMvcConfig {    @Bean    public InternalResourceViewResolver viewResolver() {        InternalResourceViewResolver vr = new InternalResourceViewResolver();        // set location of views.        vr.setPrefix("/");        // set the extension of views.        vr.setSuffix(".jsp");        return vr;    }}创建数据库连接public class DbManager {    @Bean    public BasicDataSource getDataSource() {        BasicDataSource bds = new BasicDataSource();        bds.setDriverClassName("com.mysql.jdbc.Driver");        bds.setUrl("jdbc:mysql://localhost:3306/local");        bds.setUsername("root");        bds.setPassword("");        return bds;    }    @Autowired    private DataSource ds;    public void setDs(DataSource ds) {        this.ds = ds;    }    public Connection conn() throws SQLException {        Connection conn = ds.getConnection();        return conn;    }}以及处理用户请求以检查连接是否建立的最终控制器类。@Controllerpublic class MyController {    @RequestMapping("/check")    public ModelAndView greet() throws SQLException {        DbManager dbMan = new DbManager();        if (dbMan.conn() != null) {            return new ModelAndView("welcome", "msg", "SUCCESS");        } else {            return new ModelAndView("welcome", "msg", "FAIL");        }    }}提前致谢:)
查看完整描述

2 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

可以看到的错误是你错过了 DbManager.class 上的 @Configuration 注解


我想指出的另一件事是“setDs”方法,你不需要这个,因为这基本上是@Autowired 正在做的,这也是你的下一个错误,你必须使用 @Autowired 从 spring 获取 DbManager 的实例.


@Autowired

private DataSource dbMan;


 @RequestMapping("/check")

public ModelAndView greet() throws SQLException {


    //DbManager dbMan = new DbManager();


    if (dbMan.conn() != null) {

        return new ModelAndView("welcome", "msg", "SUCCESS");

    } else {

        return new ModelAndView("welcome", "msg", "FAIL");

    }


}

如果您的连接仍然没有装箱,请确保。


DbManager.class 是否在您在 @ComponentScan 注释中给出的包中。


查看完整回答
反对 回复 2021-08-25
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

当您自己实例化 DbManager 时,spring 无法拦截并为您自动装配。因此数据源将为空。

要解决此问题:

  • 首先给 DbManager 添加一个 @Configuration 注解——然后 Spring 会自动将它识别为一个 bean 工厂并为你实例化它。(在执行此操作时,您可能会首先看到错误,因为 DbManager 会尝试自动装配它自己创建的 bean。只需从类中删除 @Autowired 并完全删除对数据源的引用。

  • 让 Spring 将数据源自动连接到您的控制器中(例如,通过构造函数或字段注入)。

希望这可以帮助


查看完整回答
反对 回复 2021-08-25
  • 2 回答
  • 0 关注
  • 205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信