我目前正在使用Quartz来存储计划的作业。当试图使用JobStore类型的JDBC在二级Quartz数据库中持久存储计划的作业时,我收到了一堆关于注射,bean的错误。
引发原因:网页服务器异常:无法启动嵌入式Tomcat
原因:org. springframework. beans.工厂.不满足的依赖项异常:创建名为"jwtFilter"的Bean时出错:通过字段"userRepo"表达的依赖关系未满足;嵌套的异常是org. springframework. bean.工厂。创建在pl. certificatemanager. CertificateManagerApp.存储库中定义的名为'userRepo'的Bean时出错。在JpaRepositoriesRegistrar上声明的@EnableJpaRepositories中定义的UserRepo。EnableJpaRepositoriesConfiguration:设置Bean属性"实体管理器"时,无法创建类型为[org. springframework. orm. jpa. SharedEntityManagerCreator]的内部Bean "(内部Bean)#29fa6b65";嵌套的异常是org. springframework. bean.工厂。创建名为"(内部Bean)#29fa6b65"的Bean时出错:设置构造函数参数时无法解析对Bean "entityManagerFactory"的引用;嵌套的异常是org. springframework. bean.工厂。创建在类路径资源[org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration $JdbcStoreTypeConfiguration. class]中定义的名为"quartzDataSourceScriptDatabaseInitializer"的Bean时出错:通过工厂方法示例化Bean失败;嵌套的异常是org. springframework. beans。无法示例化[组织.Spring框架.引导.自动配置.石英.石英数据源脚本数据库初始化程序]:工厂方法"quartzDataSourceScriptDatabaseInitializer"引发了异常;嵌套异常是java. lang.非法状态异常:无法检测数据库类型
- 关于我的存储库和@EnableJpaRepositories的错误**
导致原因:组织。springframework。bean。工厂。bean创建异常:创建在pl. certificatemanager. CertificateManagerApp.存储库中定义的名为'userRepo'的Bean时出错。在JpaRepositoriesRegistrar上声明的@EnableJpaRepositories中定义的UserRepo。EnableJpaRepositoriesConfiguration:设置Bean属性"实体管理器"时,无法创建类型为[org. springframework. orm. jpa. SharedEntityManagerCreator]的内部Bean "(内部Bean)#29fa6b65";嵌套的异常是org. springframework. bean.工厂。创建名为"(内部Bean)#29fa6b65"的Bean时出错:设置构造函数参数时无法解析对Bean "entityManagerFactory"的引用;嵌套的异常是org. springframework. bean.工厂。创建在类路径资源[org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration $JdbcStoreTypeConfiguration. class]中定义的名为"quartzDataSourceScriptDatabaseInitializer"的Bean时出错:通过工厂方法示例化Bean失败;嵌套的异常是org. springframework. beans。无法示例化[组织.Spring框架.引导.自动配置.石英.石英数据源脚本数据库初始化程序]:工厂方法"quartzDataSourceScriptDatabaseInitializer"引发了异常;嵌套异常是java. lang.非法状态异常:无法检测数据库类型
- 设置构造函数参数时无法解析对Bean "entityManagerFactory"的引用**
导致原因:组织。springframework。bean。工厂。bean创建异常:创建名为"(内部Bean)#29fa6b65"的Bean时出错:设置构造函数参数时无法解析对Bean "entityManagerFactory"的引用;嵌套的异常是org. springframework. bean.工厂。创建在类路径资源[org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration $JdbcStoreTypeConfiguration. class]中定义的名为"quartzDataSourceScriptDatabaseInitializer"的Bean时出错:通过工厂方法示例化Bean失败;嵌套的异常是org. springframework. beans。无法示例化[组织.Spring框架.引导.自动配置.石英.石英数据源脚本数据库初始化程序]:工厂方法"quartzDataSourceScriptDatabaseInitializer"引发了异常;嵌套异常是java. lang.非法状态异常:无法检测数据库类型
- 最后一个直接与Quartz数据源有关。但是,我认为首先解决主数据源的问题是目前的优先事项。**
导致原因:组织。springframework。bean。工厂。bean创建异常:创建在类路径资源[org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration $JdbcStoreTypeConfiguration. class]中定义的名为"quartzDataSourceScriptDatabaseInitializer"的Bean时出错:通过工厂方法示例化Bean失败;嵌套的异常是org. springframework. beans。无法示例化[组织.Spring框架.引导.自动配置.石英.石英数据源脚本数据库初始化程序]:工厂方法"quartzDataSourceScriptDatabaseInitializer"引发了异常;嵌套异常是java. lang.非法状态异常:无法检测数据库类型
- 应用程序.属性**
## Primary DataSource properties
database1.datasource.url=jdbc:mysql://localhost:3306/certificatemanagerdb
database1.datasource.username=root
database1.datasource.password=root
database1.datasource.configuration.maximum-pool-size=30
database1.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
## Quartz properties
spring.quartz.job-store-type=jdbc
spring.quartz.properties.org.quartz.threadPool.threadCount=5
spring.quartz.jdbc.initialize-schema=always
database2.datasource.url=jdbc:mysql://localhost:3306/quartz_schema
database2.datasource.username=root
database2.datasource.password=root
database2.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- 数据源配置**
@Configuration
@EnableAutoConfiguration
public class DataSourcesConfiguration {
@Bean
@Primary
@ConfigurationProperties("database1.datasource")
public DataSourceProperties firstDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("database1.datasource.first.configuration")
public HikariDataSource firstDataSource(DataSourceProperties firstDataSourceProperties) {
return firstDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
@Bean
@QuartzDataSource
@ConfigurationProperties(prefix = "database2.datasource")
public DataSource quartzDataSource() {
return DataSourceBuilder.create().build();
}
}
- SecurityConfig将注入错误中提到的jwtFilter**
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private CustomPasswordEncoder customPasswordEncoder;
@Autowired
private JwtFilter jwtFilter;
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(customPasswordEncoder.getPasswordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http = http.csrf().disable().cors().disable();
http = http.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and();
http = http.exceptionHandling()
.authenticationEntryPoint((request, response, exception) -> {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, exception.getMessage());
}).and();
http.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.anyRequest().authenticated();
http.addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class);
}
}
- 用户存储库**
@Repository
public interface UserRepo extends JpaRepository<User, Long> {
User findUserById(Long id);
User findByUsername(String username);
Boolean existsByUsername(String username);
}
当注解掉DataSourcesConfiguration中的方法**quartzDataSource()**时,一切正常(忽略Quartz Scheduler的持久数据),因此我怀疑配置Quartz DataSource的某些东西干扰了我的整个应用程序。
- SecurityConfig中的注入类JwtUtil**使用@Component进行注解。
1条答案
按热度按时间ql3eal8s1#
找到了解决方案。将
spring.datasource.url=
替换为spring.datasource.jdbcUrl=
,一切正常。