DataSourceInitializer 和 Spring MVC
DataSourceInitializer and Spring MVC
我正在研究 java 和 spring 并尝试制作我的第一个 spring mvc 应用程序。起初我制作了没有 spring mvc 的控制台应用程序,我只使用了带有 JdbcTemplate 的 dao 和服务层。我有配置文件,我在其中为 DataSource 和 DataSourceInitializer 创建 Beans 以初始化数据库。
@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/");
}
}
我存储在资源文件夹中的所有方案和数据。没有 mvc 一切都很好。但是,当我添加了 MVC 后,我得到了 java.io.FileNotFoundException org.springframework.jdbc.datasource.init.CannotReadScriptException: 无法从 ServletContext 资源 [/schema.sql] 中读取 SQL 脚本;嵌套异常是 java.io.FileNotFoundException:无法打开 ServletContext 资源 [/schema.sql]。创建数据库时 DataSourceInitializer 找不到 schema.sql。我试图解决这个问题,但我做不到。我有下一个项目结构。enter image description here
非常感谢能帮我解决这个问题,抱歉我的英语不好。
我发现了我的错误。我有一个例外,因为我没有在属性文件中的文件名前加上单词 classpath
。
schema=classpath:schema.sql
data=classpath:data.sql
我正在研究 java 和 spring 并尝试制作我的第一个 spring mvc 应用程序。起初我制作了没有 spring mvc 的控制台应用程序,我只使用了带有 JdbcTemplate 的 dao 和服务层。我有配置文件,我在其中为 DataSource 和 DataSourceInitializer 创建 Beans 以初始化数据库。
@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/");
}
}
我存储在资源文件夹中的所有方案和数据。没有 mvc 一切都很好。但是,当我添加了 MVC 后,我得到了 java.io.FileNotFoundException org.springframework.jdbc.datasource.init.CannotReadScriptException: 无法从 ServletContext 资源 [/schema.sql] 中读取 SQL 脚本;嵌套异常是 java.io.FileNotFoundException:无法打开 ServletContext 资源 [/schema.sql]。创建数据库时 DataSourceInitializer 找不到 schema.sql。我试图解决这个问题,但我做不到。我有下一个项目结构。enter image description here
非常感谢能帮我解决这个问题,抱歉我的英语不好。
我发现了我的错误。我有一个例外,因为我没有在属性文件中的文件名前加上单词 classpath
。
schema=classpath:schema.sql
data=classpath:data.sql