- Caused by: java.lang.NoSuchMethodError: org.springframework.web.bind.annotation.RequestMapping.path()[Ljava/lang/String;
解决方法:clean eclipse工程、重新新建Tomcat - jar包冲突
解决方法:此处只解释maven如何使用,本工程依赖leech-core,奈何leech-core依赖2.3.22-incubatin,只需要,再次引入你需要的版本即可。(在pom中查看依赖关系,ide、构建工具不一致,但是是思路一样)
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.25-incubating</version>
</dependency>
<dependency>
<groupId>com.sf.leech</groupId>
<artifactId>leech-core</artifactId>
<version>2.0.1-SNAPSHOT</version>
<exclusion>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.22-incubating</version>
</exclusion>
</dependency>
3. Maven打包命令
A:mvn versions:set -DnewVersion=2.0.1-SNAPSHOT
(-SNAPSHOT表示版本覆盖,有重复版本无所谓,没有这个-SNAPSHOT版本相同会报错)
恢复原版本:mvn versions:revert
B:1.进入leech根目录执行:
mvn clean source:jar package deploy -Dmaven.test.skip=true
2.进入leech-maven-plugin目录执行:
mvn clean source:jar package deploy -Dmaven.test.skip=true
或者关系,跳过test
C:OK: mvn versions:commit;
fail: mvn versions:revert;
4. ajax跨域问题
response.setHeader(“Access-Control-Allow-Origin”,”*”);
response.setHeader(“Access-Control-Allow-Headers”,”x-requested-with,ssi-token”);
response.setHeader(“Access-Control-Max-Age”,”3600”);
response.setHeader(“Access-Control-Allow-Methods”,”GET,POST,PUT,DELETE,OPTIONS”);
5. select in (select) 为NULL
SELECT *
FROM dbo.Table_A AS a
WHERE a.ID NOT IN ( SELECT b.ID
FROM dbo.Table_B AS b
WHERE b.ID IS NOT NULL ) –排除NULL值参较
运算符比较
5. quartz 加载 spring bean
xml配置
<bean id="testSetJobDetailBean" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="name" value="exampleJob" />
<property name="jobClass" value="com.sf.web.quartz.TestSetQuartz" />
<!-- 可以封装各种数据到JobExecutionContext里 -->
<property name="jobDataAsMap">
<map>
<entry key="timeout" value="5"/>
</map>
</property>
</bean>
<bean id="testTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="testSetJobDetailBean" />
<property name="startDelay" value="10000"/>
<property name="cronExpression" value="0 0/1 * * * ?" />
</bean>
<bean id="testSchedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="schedulerContextAsMap">
<map>
<!-- spring 管理的service需要放到这里,才能够注入成功 -->
<description>schedulerContextAsMap</description>
<entry key="testSetRunningServiceImpl" value-ref="testSetRunningServiceImpl"/>
<entry key="emailHttpGeneratorImpl" value-ref="emailHttpGeneratorImpl"/>
</map>
</property>
<property name="applicationContextSchedulerContextKey">
<value>applicationContext</value>
</property>
<property name="triggers">
<list>
<ref bean="testTaskTrigger" />
</list>
</property>
</bean>
我的java源码
public class TestSetQuartz extends QuartzJobBean {
private static final int QUARTZ = 1;
private static final int SCENE_TYPE = 1;
private static Logger logger = LoggerFactory.getLogger(TestSetQuartz.class);
private TestSetRunningService runService;
private EmailHttpGenerator emailervice;
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
Date now = new Date();
logger.info("[start quart time -- {}]", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now));
initService(context);
List<Integer> testSetIdList = getTestSetIdList(now);
for (Integer testSetId : testSetIdList) {
task(testSetId);
}
logger.info("[end quart time -- {}]", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}
private void initService(JobExecutionContext context) {
try {
// 获取JobExecutionContext中的service对象
SchedulerContext schCtx = context.getScheduler().getContext();
// 获取Spring中的上下文
ApplicationContext appCtx = (ApplicationContext) schCtx.get("applicationContext");
runService = (TestSetRunningService) appCtx.getBean("testSetRunningServiceImpl");
emailervice = (EmailHttpGenerator) appCtx.getBean("emailHttpGeneratorImpl");
} catch (SchedulerException e1) {
logger.error("TestSetQuartz init service error");
}
}
private List<Integer> getTestSetIdList(Date now ) {
List<Integer> testSetIdList = new ArrayList<Integer>();
Map<Integer, Object> cache = CacheClass.getCacheMap();
for (Entry<Integer, Object> entry : cache.entrySet()) {
Date fuDate = (Date) entry.getValue();
boolean lessThanSixtyS = (fuDate.getTime() - now.getTime())/1000 <60 && (fuDate.getTime() - now.getTime())/1000 >=0;
if (lessThanSixtyS) {
testSetIdList.add(entry.getKey());
}
}
return testSetIdList;
}
private void task(Integerid){
//todo
}
}