【问题标题】:DataSourceInitializer and Spring MVCDataSourceInitializer 和 Spring MVC
【发布时间】:2020-11-24 20:05:51
【问题描述】:

我正在学习 java 和 spring,并尝试制作我的第一个 spring mvc 应用程序。起初我制作了没有 spring mvc 的控制台应用程序,我只使用了带有 JdbcTemplate 的 dao 和服务层。我有配置文件,我在其中为 DataSource 和 DataSourceInitializer 制作 Bean 以初始化数据库。

@EnableWebMvc
@EnableTransactionManagement
@ComponentScan("ru.stepev")
@PropertySource("classpath:config.properties")
public class UniversityConfig implements WebMvcConfigurer {

    @Value("${driver}")
    private String driver;

    @Value("${url}")
    private String url;

    @Value("${user}")
    private String user;

    @Value("${pass}")
    private String pass;

    @Value("${schema}")
    private Resource schema;

    @Value("${data}")
    private Resource data;

    @Bean
    public JdbcTemplate jdbcTamplate(DataSource dateSourse) {
        return new JdbcTemplate(dateSourse);
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(pass);
        return dataSource;
    }

    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public DataSourceInitializer dataSourceInitializer(DataSource dataSource) {
        ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
        resourceDatabasePopulator.addScript(schema);
        resourceDatabasePopulator.addScript(data);
        DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
        dataSourceInitializer.setDataSource(dataSource);
        dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);
        return dataSourceInitializer;
    }
    
    private final ApplicationContext applicationContext;

    public UniversityConfig(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }
    
     @Bean
        public SpringResourceTemplateResolver templateResolver() {
            SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
            templateResolver.setApplicationContext(applicationContext);
            templateResolver.setPrefix("/WEB-INF/view/");
            templateResolver.setSuffix(".jsp");
            return templateResolver;
        }
    
    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        registry.viewResolver(resolver);
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }
}

我存储在资源文件夹中的所有 shemes 和数据。没有 mvc 一切都很好。但是当我添加了 MVC 时,我得到了 java.io.FileNotFoundException org.springframework.jdbc.datasource.init.CannotReadScriptException: Cannot read SQL script from ServletContext resource [/schema.sql];嵌套异常是 java.io.FileNotFoundException:无法打开 ServletContext 资源 [/schema.sql]。创建数据库时,DataSourceInitializer 找不到 schema.sql。我试图解决这个问题,但我做不到。我有下一个项目结构。enter image description here

我将非常感谢您帮助我解决这个问题,并为我的英语不好感到抱歉。

【问题讨论】:

    标签: java spring model-view-controller


    【解决方案1】:

    我发现了我的错误。我有一个例外,因为我没有在属性文件中的文件名前加上单词classpath

    schema=classpath:schema.sql
    
    data=classpath:data.sql
    

    【讨论】:

      猜你喜欢
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      • 2011-08-10
      • 2014-11-26
      相关资源
      最近更新 更多