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

我正在创建一个与 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;


    }


}

以及处理用户请求以检查连接是否建立的最终控制器类。


@Controller

public 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");

        }


    }


}

提前致谢:)


慕婉清6462132
浏览 206回答 2
2回答

慕斯709654

可以看到的错误是你错过了 DbManager.class 上的 @Configuration 注解我想指出的另一件事是“setDs”方法,你不需要这个,因为这基本上是@Autowired 正在做的,这也是你的下一个错误,你必须使用 @Autowired 从 spring 获取 DbManager 的实例.@Autowiredprivate DataSource dbMan;&nbsp;@RequestMapping("/check")public ModelAndView greet() throws SQLException {&nbsp; &nbsp; //DbManager dbMan = new DbManager();&nbsp; &nbsp; if (dbMan.conn() != null) {&nbsp; &nbsp; &nbsp; &nbsp; return new ModelAndView("welcome", "msg", "SUCCESS");&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; return new ModelAndView("welcome", "msg", "FAIL");&nbsp; &nbsp; }}如果您的连接仍然没有装箱,请确保。DbManager.class 是否在您在 @ComponentScan 注释中给出的包中。

天涯尽头无女友

当您自己实例化 DbManager 时,spring 无法拦截并为您自动装配。因此数据源将为空。要解决此问题:首先给 DbManager 添加一个 @Configuration 注解——然后 Spring 会自动将它识别为一个 bean 工厂并为你实例化它。(在执行此操作时,您可能会首先看到错误,因为 DbManager 会尝试自动装配它自己创建的 bean。只需从类中删除 @Autowired 并完全删除对数据源的引用。让 Spring 将数据源自动连接到您的控制器中(例如,通过构造函数或字段注入)。希望这可以帮助
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java