亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法使用注解和基于 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 關注
  • 259 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號