java.lang.IllegalStateException:未能在Spring批处理中执行org.springframework.boot.SpringApplication.callRunne上的CommandLineRunner
我正在开发基于Spring Boot+批处理XML的方法。在运行代码时,我发现以下异常。根据公司标准,我们使用我们自己的数据源,它是包装器,具有从加密值读取密码的所有安全性 谁能告诉我这里出了什么问题吗java.lang.IllegalStateException:未能在Spring批处理中执行org.springframework.boot.SpringApplication.callRunne上的CommandLineRunner,spring,spring-boot,spring-batch,spring-batch-admin,Spring,Spring Boot,Spring Batch,Spring Batch Admin,我正在开发基于Spring Boot+批处理XML的方法。在运行代码时,我发现以下异常。根据公司标准,我们使用我们自己的数据源,它是包装器,具有从加密值读取密码的所有安全性 谁能告诉我这里出了什么问题吗 java.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework.boot.SpringApplication.callRunner(SpringApplication.
java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:803) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:784) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1258) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
at com.mastercard.EdsjpaApplication.main(EdsjpaApplication.java:23) [classes/:na]
Caused by: java.lang.NullPointerException: null
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_162]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_162]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_162]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_162]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) ~[spring-aop-5.0.8.RELEASE.jar:5.0.8.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:197) ~[spring-aop-5.0.8.RELEASE.jar:5.0.8.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.0.8.RELEASE.jar:5.0.8.RELEASE]
at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$PassthruAdvice.invoke(SimpleBatchConfiguration.java:127) ~[spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185) ~[spring-aop-5.0.8.RELEASE.jar:5.0.8.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.0.8.RELEASE.jar:5.0.8.RELEASE]
at com.sun.proxy.$Proxy69.getJobInstances(Unknown Source) ~[na:na]
at org.springframework.batch.core.JobParametersBuilder.getNextJobParameters(JobParametersBuilder.java:254) ~[spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
at org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner.execute(JobLauncherCommandLineRunner.java:162) ~[spring-boot-autoconfigure-2.0.4.RELEASE.jar:2.0.4.RELEASE]
at org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner.executeLocalJobs(JobLauncherCommandLineRunner.java:179) ~[spring-boot-autoconfigure-2.0.4.RELEASE.jar:2.0.4.RELEASE]
at org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner.launchJobFromProperties(JobLauncherCommandLineRunner.java:134) ~[spring-boot-autoconfigure-2.0.4.RELEASE.jar:2.0.4.RELEASE]
at org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner.run(JobLauncherCommandLineRunner.java:128) ~[spring-boot-autoconfigure-2.0.4.RELEASE.jar:2.0.4.RELEASE]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:800) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
... 5 common frames omitted
CommonConfig.java
@Configuration
@ComponentScan("com.XX")
@EnableBatchProcessing
@PropertySource("classpath:database.properties")
@ImportResource({ "classpath:jobs/XXXX.xml"})
@EnableJpaRepositories(basePackages = {"com.XXXX.repository"})
public class CommonConfig implements BatchConfigurer{
private JobRepository jobRepository;
private JobLauncher jobLauncher;
private JobExplorer jobExplorer;
@Inject
private DataSource dataSource;
@Inject
private PlatformTransactionManager transactionManager;
@Override
@Bean
public JobRepository getJobRepository() throws Exception {
return jobRepository;
}
@Override
public PlatformTransactionManager getTransactionManager() throws Exception {
return transactionManager;
}
@Override
@Bean
public JobLauncher getJobLauncher() throws Exception {
return jobLauncher;
}
@Override
@Bean
public JobExplorer getJobExplorer() throws Exception {
return jobExplorer;
}
/*private JobLauncher createJobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
jobLauncher.setTaskExecutor( new SimpleAsyncTaskExecutor());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}*/
/*protected JobRepository createJobRepository() throws Exception {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setIsolationLevelForCreate("ISOLATION_SERIALIZABLE");
factory.setDataSource(dataSource);
factory.setTransactionManager(transactionManager);
factory.setValidateTransactionState(false);
factory.afterPropertiesSet();
return factory.getObject();
}*/
@Bean
public JobBuilderFactory jobBuilderFactory(JobRepository jobRepository){
return new JobBuilderFactory(jobRepository);
}
@Bean
public StepBuilderFactory stepBuilderFactory(JobRepository jobRepository, PlatformTransactionManager transactionManager){
return new StepBuilderFactory(jobRepository, transactionManager);
}
}
@Configuration
@Component
@PropertySource("classpath:database.properties")
public class DatabaseConfig {
@Bean(name = "dataSource")
public DataSource dataSource() throws IOException {
OracleDataSource ds = null;
XXXInfoFactory userInfoFactory = new XXXInfoFactory();
XXUserInfo userInfo = userInfoFactory.getXXUserInfo(value);
if (userInfo != null) {
ds = getDataSource(userInfo, edsurl);
}
return ds;
}
}
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication implements CommandLineRunner{
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
final ConfigurableApplicationContext context = SpringApplication.run(CommonConfig.class);
}
}
DatabaseConfig.java
@Configuration
@ComponentScan("com.XX")
@EnableBatchProcessing
@PropertySource("classpath:database.properties")
@ImportResource({ "classpath:jobs/XXXX.xml"})
@EnableJpaRepositories(basePackages = {"com.XXXX.repository"})
public class CommonConfig implements BatchConfigurer{
private JobRepository jobRepository;
private JobLauncher jobLauncher;
private JobExplorer jobExplorer;
@Inject
private DataSource dataSource;
@Inject
private PlatformTransactionManager transactionManager;
@Override
@Bean
public JobRepository getJobRepository() throws Exception {
return jobRepository;
}
@Override
public PlatformTransactionManager getTransactionManager() throws Exception {
return transactionManager;
}
@Override
@Bean
public JobLauncher getJobLauncher() throws Exception {
return jobLauncher;
}
@Override
@Bean
public JobExplorer getJobExplorer() throws Exception {
return jobExplorer;
}
/*private JobLauncher createJobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
jobLauncher.setTaskExecutor( new SimpleAsyncTaskExecutor());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}*/
/*protected JobRepository createJobRepository() throws Exception {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setIsolationLevelForCreate("ISOLATION_SERIALIZABLE");
factory.setDataSource(dataSource);
factory.setTransactionManager(transactionManager);
factory.setValidateTransactionState(false);
factory.afterPropertiesSet();
return factory.getObject();
}*/
@Bean
public JobBuilderFactory jobBuilderFactory(JobRepository jobRepository){
return new JobBuilderFactory(jobRepository);
}
@Bean
public StepBuilderFactory stepBuilderFactory(JobRepository jobRepository, PlatformTransactionManager transactionManager){
return new StepBuilderFactory(jobRepository, transactionManager);
}
}
@Configuration
@Component
@PropertySource("classpath:database.properties")
public class DatabaseConfig {
@Bean(name = "dataSource")
public DataSource dataSource() throws IOException {
OracleDataSource ds = null;
XXXInfoFactory userInfoFactory = new XXXInfoFactory();
XXUserInfo userInfo = userInfoFactory.getXXUserInfo(value);
if (userInfo != null) {
ds = getDataSource(userInfo, edsurl);
}
return ds;
}
}
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication implements CommandLineRunner{
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
final ConfigurableApplicationContext context = SpringApplication.run(CommonConfig.class);
}
}
MyApplication.java
@Configuration
@ComponentScan("com.XX")
@EnableBatchProcessing
@PropertySource("classpath:database.properties")
@ImportResource({ "classpath:jobs/XXXX.xml"})
@EnableJpaRepositories(basePackages = {"com.XXXX.repository"})
public class CommonConfig implements BatchConfigurer{
private JobRepository jobRepository;
private JobLauncher jobLauncher;
private JobExplorer jobExplorer;
@Inject
private DataSource dataSource;
@Inject
private PlatformTransactionManager transactionManager;
@Override
@Bean
public JobRepository getJobRepository() throws Exception {
return jobRepository;
}
@Override
public PlatformTransactionManager getTransactionManager() throws Exception {
return transactionManager;
}
@Override
@Bean
public JobLauncher getJobLauncher() throws Exception {
return jobLauncher;
}
@Override
@Bean
public JobExplorer getJobExplorer() throws Exception {
return jobExplorer;
}
/*private JobLauncher createJobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
jobLauncher.setTaskExecutor( new SimpleAsyncTaskExecutor());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}*/
/*protected JobRepository createJobRepository() throws Exception {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setIsolationLevelForCreate("ISOLATION_SERIALIZABLE");
factory.setDataSource(dataSource);
factory.setTransactionManager(transactionManager);
factory.setValidateTransactionState(false);
factory.afterPropertiesSet();
return factory.getObject();
}*/
@Bean
public JobBuilderFactory jobBuilderFactory(JobRepository jobRepository){
return new JobBuilderFactory(jobRepository);
}
@Bean
public StepBuilderFactory stepBuilderFactory(JobRepository jobRepository, PlatformTransactionManager transactionManager){
return new StepBuilderFactory(jobRepository, transactionManager);
}
}
@Configuration
@Component
@PropertySource("classpath:database.properties")
public class DatabaseConfig {
@Bean(name = "dataSource")
public DataSource dataSource() throws IOException {
OracleDataSource ds = null;
XXXInfoFactory userInfoFactory = new XXXInfoFactory();
XXUserInfo userInfo = userInfoFactory.getXXUserInfo(value);
if (userInfo != null) {
ds = getDataSource(userInfo, edsurl);
}
return ds;
}
}
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication implements CommandLineRunner{
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
final ConfigurableApplicationContext context = SpringApplication.run(CommonConfig.class);
}
}
你能发布整个堆栈跟踪吗?@Jayesh-这是整个堆栈跟踪。虽然我使用了logback.xml文件,但这只是我所能看到的。您能否启用
--debug
并发布spring boot应用程序从头到尾的整个日志?@Mahmoud Ben Hassine-这只使用--debug选项运行。我想知道我只能看到上面的日志。如果您使用--debug
运行,您应该可以看到更多的堆栈跟踪。如果userInfo
为空,则数据源可能为空。您确定您的数据源不是空的吗?