虽然解决了,但是至今仍然不知道什么原因导致的报错信息。
代码根据网上其他大牛们的案列,不断复制复制复制到自己的电脑。。。
项目最终在自己电脑上已经是可以运行的了,但是把代码导入到公司电脑的时候,就报错了。报错信息如下:
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.3.RELEASE) 2018-06-19 14:59:48.644 INFO 11996 --- [ main] c.b.demo.TestSqlMybatisApplication : Starting TestSqlMybatisApplication on user-PC with PID 11996 (E:\test_sqlMore_mybatis_redis_quartz4\test_sqlMore_mybatis_redis_quartz4\target\classes started by user in E:\test_sqlMore_mybatis_redis_quartz4\test_sqlMore_mybatis_redis_quartz4) 2018-06-19 14:59:48.647 INFO 11996 --- [ main] c.b.demo.TestSqlMybatisApplication : No active profile set, falling back to default profiles: default 2018-06-19 14:59:48.694 INFO 11996 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@327b636c: startup date [Tue Jun 19 14:59:48 CST 2018]; root of context hierarchy 2018-06-19 14:59:49.095 WARN 11996 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration]; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfigureRegistrar]: Unresolvable class definition; nested exception is java.lang.NoClassDefFoundError: org/springframework/data/repository/config/RepositoryConfigurationSource 2018-06-19 14:59:49.111 INFO 11996 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2018-06-19 14:59:49.118 ERROR 11996 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration]; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfigureRegistrar]: Unresolvable class definition; nested exception is java.lang.NoClassDefFoundError: org/springframework/data/repository/config/RepositoryConfigurationSource at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:648) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:303) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:245) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:638) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.lambda$processDeferredImportSelectors$2(ConfigurationClassParser.java:567) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at java.util.ArrayList.forEach(Unknown Source) ~[na:1.8.0_131] at org.springframework.context.annotation.ConfigurationClassParser.processDeferredImportSelectors(ConfigurationClassParser.java:563) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:188) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:316) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:233) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:273) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:694) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] at com.bestwehotel.demo.TestSqlMybatisApplication.main(TestSqlMybatisApplication.java:13) [classes/:na] Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfigureRegistrar]: Unresolvable class definition; nested exception is java.lang.NoClassDefFoundError: org/springframework/data/repository/config/RepositoryConfigurationSource at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:130) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:150) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:628) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] ... 20 common frames omitted Caused by: java.lang.NoClassDefFoundError: org/springframework/data/repository/config/RepositoryConfigurationSource at java.lang.Class.getDeclaredConstructors0(Native Method) ~[na:1.8.0_131] at java.lang.Class.privateGetDeclaredConstructors(Unknown Source) ~[na:1.8.0_131] at java.lang.Class.getConstructor0(Unknown Source) ~[na:1.8.0_131] at java.lang.Class.getDeclaredConstructor(Unknown Source) ~[na:1.8.0_131] at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:123) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] ... 22 common frames omitted Caused by: java.lang.ClassNotFoundException: org.springframework.data.repository.config.RepositoryConfigurationSource at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.8.0_131] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_131] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.8.0_131] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_131] ... 27 common frames omitted |
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.bestwehotel</groupId> <artifactId>test_sql_mybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>test_sql_mybatis</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!-- web应用启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- 连接池 --> <dependency> <groupId>com.jolbox</groupId> <artifactId>bonecp-spring</artifactId> <version>0.8.0.RELEASE</version> </dependency> <!-- 整合redis --> <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>1.5.9.RELEASE</version> </dependency> --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.3.2.RELEASE</version> </dependency> <!-- 定时任务 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.3</version> </dependency> <!-- MyBatis启动器 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.12</version> </dependency> </dependencies> <build> <plugins> <!-- 打jar包时如果不配置该插件,打出来的jar包没有清单文件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> |
quartz.properties配置如下:
bonecp.jdbcUrl=jdbc:mysql://127.0.0.1:3306/springboot02?useUnicode=true&characterEncoding=utf8 bonecp.username=root bonecp.password=root bonecp.driverClass=com.mysql.jdbc.Driver bonecp.minConnectionsPerPartition=6 bonecp.maxConnectionsPerPartition=150 #quartz集群配置 # =========================================================================== # Configure Main Scheduler Properties 调度器属性 # =========================================================================== #调度标识名 集群中每一个实例都必须使用相同的名称 quartz.scheduler.instanceName=DefaultQuartzScheduler #ID设置为自动获取 每一个必须不同 org.quartz.scheduler.instanceid=AUTO #============================================================================ # Configure ThreadPool #============================================================================ #线程池的实现类(一般使用SimpleThreadPool即可满足几乎所有用户的需求) org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool #指定线程数,至少为1(无默认值)(一般设置为1-100直接的整数合适) org.quartz.threadPool.threadCount = 25 #设置线程的优先级(最大为java.lang.Thread.MAX_PRIORITY 10,最小为Thread.MIN_PRIORITY 1,默认为5) org.quartz.threadPool.threadPriority = 6 #============================================================================ # Configure JobStore #============================================================================ # 信息保存时间 默认值60秒 org.quartz.jobStore.misfireThreshold = 60000 #数据保存方式为数据库持久化 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX #数据库代理类,一般org.quartz.impl.jdbcjobstore.StdJDBCDelegate可以满足大部分数据库 org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate #JobDataMaps是否都为String类型 org.quartz.jobStore.useProperties = false #数据库别名 随便取 org.quartz.jobStore.dataSource = myDS #表的前缀,默认QRTZ_ org.quartz.jobStore.tablePrefix = QRTZ_ #是否加入集群 org.quartz.jobStore.isClustered = true #调度实例失效的检查时间间隔 org.quartz.jobStore.clusterCheckinInterval = 20000 |
DialogJob.java
import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; //需要交由spring管理 @Service("dialogJob") public class DialogJob { //@Autowired //private QuestionService questionService; //方法名在quartz定义 public void execute() throws Exception{ //具体执行业务 // questionService.XXXXX(); System.out.println("这里是03的版本"+new Date()); } } |
InvokingJobDetailDetailFactory.java
import java.lang.reflect.Method; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.context.ApplicationContext; import org.springframework.scheduling.quartz.QuartzJobBean; public class InvokingJobDetailDetailFactory extends QuartzJobBean{ // 计划任务所在类 private String targetObject; // 具体需要执行的计划任务 private String targetMethod; private ApplicationContext ctx; protected void executeInternal(JobExecutionContext context) throws JobExecutionException { try { Object otargetObject = ctx.getBean(targetObject); Method m = null; try { m = otargetObject.getClass().getMethod(targetMethod); m.invoke(otargetObject); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } catch (Exception e) { throw new JobExecutionException(e); } } public void setApplicationContext(ApplicationContext applicationContext) { this.ctx = applicationContext; } public void setTargetObject(String targetObject) { this.targetObject = targetObject; } public void setTargetMethod(String targetMethod) { this.targetMethod = targetMethod; } } |
QuartzConfig.java
import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.quartz.Job; import org.quartz.JobDetail; import org.quartz.Trigger; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.scheduling.quartz.CronTriggerFactoryBean; import org.springframework.scheduling.quartz.JobDetailFactoryBean; import org.springframework.scheduling.quartz.SchedulerFactoryBean; @Configuration //@ConfigurationProperties("/quartz.properties") @PropertySource(value = "classpath:quartz.properties") public class QuartzConfig { @Value("${quartz.scheduler.instanceName}") private String quartzInstanceName; @Value("${bonecp.driverClass}") private String myDSDriver; @Value("${bonecp.jdbcUrl}") private String myDSURL; @Value("${bonecp.username}") private String myDSUser; @Value("${bonecp.password}") private String myDSPassword; @Value("${bonecp.minConnectionsPerPartition}") private String myDSMaxConnections; /** * 设置属性 * @return * @throws IOException */ private Properties quartzProperties() throws IOException { Properties prop = new Properties(); prop.put("quartz.scheduler.instanceName", quartzInstanceName); prop.put("org.quartz.scheduler.instanceId", "AUTO"); prop.put("org.quartz.scheduler.skipUpdateCheck", "true"); prop.put("org.quartz.scheduler.jmx.export", "true"); prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX"); prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.StdJDBCDelegate"); prop.put("org.quartz.jobStore.dataSource", "quartzDataSource"); prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); prop.put("org.quartz.jobStore.isClustered", "true"); prop.put("org.quartz.jobStore.clusterCheckinInterval", "20000"); prop.put("org.quartz.jobStore.dataSource", "myDS"); prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1"); prop.put("org.quartz.jobStore.misfireThreshold", "120000"); prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true"); prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE"); prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); prop.put("org.quartz.threadPool.threadCount", "10"); prop.put("org.quartz.threadPool.threadPriority", "8"); prop.put("org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread", "true"); prop.put("org.quartz.dataSource.myDS.driver", myDSDriver); prop.put("org.quartz.dataSource.myDS.URL", myDSURL); prop.put("org.quartz.dataSource.myDS.user", myDSUser); prop.put("org.quartz.dataSource.myDS.password", myDSPassword); // System.out.println("myDSMaxConnections:" + myDSMaxConnections); prop.put("org.quartz.dataSource.myDS.maxConnections", myDSMaxConnections); prop.put("org.quartz.plugin.triggHistory.class", "org.quartz.plugins.history.LoggingJobHistoryPlugin"); prop.put("org.quartz.plugin.shutdownhook.class", "org.quartz.plugins.management.ShutdownHookPlugin"); prop.put("org.quartz.plugin.shutdownhook.cleanShutdown", "true"); return prop; } @Bean public SchedulerFactoryBean schedulerFactoryBean(@Qualifier("dialogJobTrigger") Trigger cronJobTrigger) throws IOException { SchedulerFactoryBean factory = new SchedulerFactoryBean(); // this allows to update triggers in DB when updating settings in config file: //用于quartz集群,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 factory.setOverwriteExistingJobs(true); //用于quartz集群,加载quartz数据源 //factory.setDataSource(dataSource); //QuartzScheduler 延时启动,应用启动完10秒后 QuartzScheduler 再启动 factory.setStartupDelay(10); //用于quartz集群,加载quartz数据源配置 factory.setQuartzProperties(quartzProperties()); factory.setAutoStartup(true); factory.setApplicationContextSchedulerContextKey("applicationContext"); //注册触发器 factory.setTriggers(cronJobTrigger); // factory.setConfigLocation(new FileSystemResource(this.getClass().getResource("/quartz.properties").getPath())); return factory; } /** * 加载job * @return */ @Bean public JobDetailFactoryBean updateDialogStatusJobDetail() { return createJobDetail(InvokingJobDetailDetailFactory.class, "updateDialogStatusGroup", "dialogJob"); } /** * 加载触发器 * @param jobDetail * @return */ @Bean(name = "dialogJobTrigger") public CronTriggerFactoryBean dialogStatusJobTrigger(@Qualifier("updateDialogStatusJobDetail") JobDetail jobDetail) { return dialogStatusTrigger(jobDetail, "0/5 * * * * ? "); } /* //test @Bean public SchedulerFactoryBean testschedulerFactoryBean(@Qualifier("testJobTrigger") Trigger cronJobTrigger) throws IOException { SchedulerFactoryBean factory = new SchedulerFactoryBean(); // this allows to update triggers in DB when updating settings in config file: //用于quartz集群,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 factory.setOverwriteExistingJobs(true); //用于quartz集群,加载quartz数据源 //factory.setDataSource(dataSource); //QuartzScheduler 延时启动,应用启动完10秒后 QuartzScheduler 再启动 factory.setStartupDelay(10); //用于quartz集群,加载quartz数据源配置 factory.setQuartzProperties(quartzProperties()); factory.setAutoStartup(true); factory.setApplicationContextSchedulerContextKey("applicationContext"); //注册触发器 factory.setTriggers(cronJobTrigger); // factory.setConfigLocation(new FileSystemResource(this.getClass().getResource("/quartz.properties").getPath())); return factory; } *//** * 加载job * @return *//* @Bean public JobDetailFactoryBean testJobDetail() { return createJobDetail(InvokingJobDetailDetailFactory.class, "testJobStatusGroup", "testJob"); } *//** * 加载触发器 * @param jobDetail * @return *//* @Bean(name = "testJobTrigger") public CronTriggerFactoryBean testJobTrigger(@Qualifier("testJobDetail") JobDetail jobDetail) { return dialogStatusTrigger(jobDetail, "0/5 * * * * ? "); } //test */ /** * 创建job工厂 * @param jobClass * @param groupName * @param targetObject * @return */ private static JobDetailFactoryBean createJobDetail(Class<?> jobClass, String groupName, String targetObject) { JobDetailFactoryBean factoryBean = new JobDetailFactoryBean(); factoryBean.setJobClass((Class<? extends Job>) jobClass); factoryBean.setDurability(true); factoryBean.setRequestsRecovery(true); factoryBean.setGroup(groupName); Map<String, String> map = new HashMap<>(); map.put("targetObject", targetObject); map.put("targetMethod", "execute"); factoryBean.setJobDataAsMap(map); return factoryBean; } /** * 创建触发器工厂 * @param jobDetail * @param cronExpression * @return */ private static CronTriggerFactoryBean dialogStatusTrigger(JobDetail jobDetail, String cronExpression) { CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean(); factoryBean.setJobDetail(jobDetail); factoryBean.setCronExpression (cronExpression); return factoryBean; } } |