Невозможно установить соединение с базой данных в Spring MVC, используя аннотации и конфигурацию на основе Java - PullRequest
0 голосов
/ 01 сентября 2018

Я создаю приложение Spring MVC, которое установило соединение с базой данных MySQL. Я использовал конфигурацию на основе 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");
        }

    }

}

Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Ошибка, которую можно увидеть, заключается в том, что вы пропустили аннотацию @Configuration на DbManager.class

Еще одна вещь, на которую я хотел бы обратить внимание, это метод "setDs", он вам не нужен, так как это в основном то, что делает @Autowired, это также ваша следующая ошибка, вы должны получить экземпляр DbManager из весны. используя @ Autowired.

@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");
    }

}

если ваше соединение еще не упаковано, убедитесь.

  1. Является ли DbManager.class в пакете, который вы дали в аннотации @ComponentScan.
0 голосов
/ 02 сентября 2018

Когда вы создаете экземпляр DbManager самостоятельно, Spring не может перехватить и выполнить автоматическое подключение за вас. Поэтому источник данных будет пустым.

Чтобы это исправить:

  • сначала добавьте аннотацию @Configuration в DbManager - затем Spring автоматически распознает ее как фабрику компонентов и создаст для вас экземпляр. (Вы, вероятно, сначала увидите ошибку при этом, потому что DbManager пытается автоматически связать компонент, который он сам создает. Просто удалите @Autowired из класса и ссылку на источник данных в целом.
  • позволяет Spring автоматически подключать источник данных к вашему контроллеру (например, с помощью конструктора или внедрения поля).

Надеюсь, это поможет

Matthias

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...