瀏覽代碼

重要重构:

xueli.xue 8 年之前
父節點
當前提交
1fd34a2091

+ 61 - 47
xxl-job-admin/src/main/java/com/xxl/job/admin/core/callback/XxlJobLogCallbackServerHandler.java 查看文件

@@ -1,6 +1,5 @@
1 1
 package com.xxl.job.admin.core.callback;
2 2
 
3
-import com.xxl.job.admin.core.model.ReturnT;
4 3
 import com.xxl.job.admin.core.model.XxlJobInfo;
5 4
 import com.xxl.job.admin.core.model.XxlJobLog;
6 5
 import com.xxl.job.admin.core.util.DynamicSchedulerUtil;
@@ -35,65 +34,80 @@ public class XxlJobLogCallbackServerHandler extends AbstractHandler {
35 34
 
36 35
 		// parse hex-json to request model
37 36
 		String requestHex = httpServletRequest.getParameter(XxlJobNetCommUtil.HEX);
37
+
38
+		// do biz
39
+		ResponseModel responseModel = dobiz(requestHex);
40
+
41
+		// format response model to hex-json
42
+		String responseHex = XxlJobNetCommUtil.formatObj2HexJson(responseModel);
43
+
44
+		// response
45
+		httpServletResponse.setContentType("text/html;charset=utf-8");
46
+		httpServletResponse.setStatus(HttpServletResponse.SC_OK);
47
+		baseRequest.setHandled(true);
48
+		httpServletResponse.getWriter().println(responseHex);
49
+	}
50
+
51
+	private ResponseModel dobiz(String requestHex){
52
+
53
+		// valid hex
54
+		if (requestHex==null || requestHex.trim().length()==0) {
55
+			return new ResponseModel(ResponseModel.FAIL, "request hex is null.");
56
+		}
57
+
58
+		// valid request model
38 59
 		RequestModel requestModel = XxlJobNetCommUtil.parseHexJson2Obj(requestHex, RequestModel.class);
60
+		if (requestModel==null) {
61
+			return new ResponseModel(ResponseModel.FAIL, "request hex parse fail.");
62
+		}
39 63
 
40
-		// process
41
-		ResponseModel responseModel = null;
64
+		// valid log item
42 65
 		XxlJobLog log = DynamicSchedulerUtil.xxlJobLogDao.load(requestModel.getLogId());
43
-		if (log!=null) {
44
-
45
-			// trigger success, to trigger child job, and avoid repeat trigger child job
46
-            String childTriggerMsg = null;
47
-			if (ResponseModel.SUCCESS.equals(requestModel.getStatus()) && !ResponseModel.SUCCESS.equals(log.getHandleStatus())) {
48
-				XxlJobInfo xxlJobInfo = DynamicSchedulerUtil.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
49
-				if (xxlJobInfo!=null && StringUtils.isNotBlank(xxlJobInfo.getChildJobKey())) {
50
-					childTriggerMsg = "<hr>";
51
-                    String[] childJobKeys = xxlJobInfo.getChildJobKey().split(",");
52
-					for (int i = 0; i < childJobKeys.length; i++) {
53
-						String[] jobKeyArr = childJobKeys[i].split("_");
54
-						if (jobKeyArr!=null && jobKeyArr.length==2) {
55
-							XxlJobInfo childJobInfo = DynamicSchedulerUtil.xxlJobInfoDao.load(jobKeyArr[0], jobKeyArr[1]);
56
-							if (childJobInfo!=null) {
57
-								try {
58
-									boolean ret = DynamicSchedulerUtil.triggerJob(childJobInfo.getJobName(), childJobInfo.getJobGroup());
59
-
60
-									// add msg
61
-									childTriggerMsg += MessageFormat.format("<br> {0}/{1} 触发子任务成功, 子任务Key: {2}, status: {3}, 子任务描述: {4}",
62
-											(i+1), childJobKeys.length, childJobKeys[i], ret, childJobInfo.getJobDesc());
63
-								} catch (SchedulerException e) {
64
-									logger.error("", e);
65
-								}
66
-							} else {
67
-								childTriggerMsg += MessageFormat.format("<br> {0}/{1} 触发子任务失败, 子任务xxlJobInfo不存在, 子任务Key: {2}",
68
-										(i+1), childJobKeys.length, childJobKeys[i]);
66
+		if (log == null) {
67
+			return new ResponseModel(ResponseModel.FAIL, "log item not found.");
68
+		}
69
+
70
+		// trigger success, to trigger child job, and avoid repeat trigger child job
71
+		String childTriggerMsg = null;
72
+		if (ResponseModel.SUCCESS.equals(requestModel.getStatus()) && !ResponseModel.SUCCESS.equals(log.getHandleStatus())) {
73
+			XxlJobInfo xxlJobInfo = DynamicSchedulerUtil.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
74
+			if (xxlJobInfo!=null && StringUtils.isNotBlank(xxlJobInfo.getChildJobKey())) {
75
+				childTriggerMsg = "<hr>";
76
+				String[] childJobKeys = xxlJobInfo.getChildJobKey().split(",");
77
+				for (int i = 0; i < childJobKeys.length; i++) {
78
+					String[] jobKeyArr = childJobKeys[i].split("_");
79
+					if (jobKeyArr!=null && jobKeyArr.length==2) {
80
+						XxlJobInfo childJobInfo = DynamicSchedulerUtil.xxlJobInfoDao.load(jobKeyArr[0], jobKeyArr[1]);
81
+						if (childJobInfo!=null) {
82
+							try {
83
+								boolean ret = DynamicSchedulerUtil.triggerJob(childJobInfo.getJobName(), childJobInfo.getJobGroup());
84
+
85
+								// add msg
86
+								childTriggerMsg += MessageFormat.format("<br> {0}/{1} 触发子任务成功, 子任务Key: {2}, status: {3}, 子任务描述: {4}",
87
+										(i+1), childJobKeys.length, childJobKeys[i], ret, childJobInfo.getJobDesc());
88
+							} catch (SchedulerException e) {
89
+								logger.error("", e);
69 90
 							}
70 91
 						} else {
71
-							childTriggerMsg += MessageFormat.format("<br> {0}/{1} 触发子任务失败, 子任务Key格式错误, 子任务Key: {2}",
92
+							childTriggerMsg += MessageFormat.format("<br> {0}/{1} 触发子任务失败, 子任务xxlJobInfo不存在, 子任务Key: {2}",
72 93
 									(i+1), childJobKeys.length, childJobKeys[i]);
73 94
 						}
95
+					} else {
96
+						childTriggerMsg += MessageFormat.format("<br> {0}/{1} 触发子任务失败, 子任务Key格式错误, 子任务Key: {2}",
97
+								(i+1), childJobKeys.length, childJobKeys[i]);
74 98
 					}
75
-
76 99
 				}
77
-			}
78 100
 
79
-			// save log
80
-			log.setHandleTime(new Date());
81
-			log.setHandleStatus(requestModel.getStatus());
82
-			log.setHandleMsg(requestModel.getMsg() + childTriggerMsg);
83
-			DynamicSchedulerUtil.xxlJobLogDao.updateHandleInfo(log);
84
-			responseModel = new ResponseModel(ResponseModel.SUCCESS, null);
85
-		} else {
86
-			responseModel = new ResponseModel(ResponseModel.FAIL, "log item not found.");
101
+			}
87 102
 		}
88 103
 
89
-		// format response model to hex-json
90
-		String responseHex = XxlJobNetCommUtil.formatObj2HexJson(responseModel);
104
+		// success, save log
105
+		log.setHandleTime(new Date());
106
+		log.setHandleStatus(requestModel.getStatus());
107
+		log.setHandleMsg(requestModel.getMsg() + childTriggerMsg);
108
+		DynamicSchedulerUtil.xxlJobLogDao.updateHandleInfo(log);
91 109
 
92
-		// response
93
-		httpServletResponse.setContentType("text/html;charset=utf-8");
94
-		httpServletResponse.setStatus(HttpServletResponse.SC_OK);
95
-		baseRequest.setHandled(true);
96
-		httpServletResponse.getWriter().println(responseHex);
110
+		return new ResponseModel(ResponseModel.SUCCESS, null);
97 111
 	}
98 112
 
99 113
 }

+ 30 - 0
xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/impl/DbGlueLoader.java 查看文件

@@ -0,0 +1,30 @@
1
+package com.xxl.job.core.glue.loader.impl;
2
+
3
+import com.xxl.job.core.glue.loader.GlueLoader;
4
+import com.xxl.job.core.util.DBUtil;
5
+
6
+import javax.sql.DataSource;
7
+import java.util.List;
8
+import java.util.Map;
9
+
10
+/**
11
+ * Created by xuxueli on 16/9/30.
12
+ */
13
+public class DbGlueLoader implements GlueLoader {
14
+
15
+    private DataSource dataSource;
16
+    public void setDataSource(DataSource dataSource) {
17
+        this.dataSource = dataSource;
18
+    }
19
+
20
+    @Override
21
+    public String load(String job_group, String job_name) {
22
+        String sql = "SELECT glue_source FROM XXL_JOB_QRTZ_TRIGGER_INFO WHERE job_group = ? AND job_name = ?";
23
+        List<Map<String, Object>> result = DBUtil.query(dataSource, sql, new String[]{job_group, job_name});
24
+        if (result!=null && result.size()==1 && result.get(0)!=null && result.get(0).get("glue_source")!=null ) {
25
+            return (String) result.get(0).get("glue_source");
26
+        }
27
+        return null;
28
+    }
29
+
30
+}

+ 128 - 0
xxl-job-core/src/main/java/com/xxl/job/core/util/DBUtil.java 查看文件

@@ -0,0 +1,128 @@
1
+package com.xxl.job.core.util;
2
+
3
+import javax.sql.DataSource;
4
+import java.sql.*;
5
+import java.util.*;
6
+
7
+/**
8
+ * Created by xuxueli on 16/9/30.
9
+ */
10
+public class DBUtil {
11
+
12
+    private static Connection getConn(DataSource dataSource) {
13
+        try {
14
+            return dataSource.getConnection();
15
+        } catch (SQLException e) {
16
+            e.printStackTrace();
17
+        }
18
+        return null;
19
+    }
20
+
21
+    /**
22
+     * update
23
+     *
24
+     * @param dataSource
25
+     * @param sql
26
+     * @param params
27
+     */
28
+    public static int update(DataSource dataSource, String sql, Object params[]) {
29
+        Connection connection = getConn(dataSource);
30
+        PreparedStatement preparedStatement = null;
31
+        int ret = 0;
32
+        try {
33
+            preparedStatement = connection.prepareStatement(sql);
34
+            if (params != null) {
35
+                for (int i = 0; i < params.length; i++) {
36
+                    preparedStatement.setObject(i + 1, params[i]);
37
+                }
38
+            }
39
+            ret = preparedStatement.executeUpdate();
40
+        } catch (SQLException e) {
41
+            e.printStackTrace();
42
+        } finally {
43
+            release(connection, preparedStatement, null);
44
+        }
45
+        return ret;
46
+    }
47
+
48
+    /**
49
+     * query
50
+     *
51
+     * @param dataSource
52
+     * @param sql
53
+     * @param params
54
+     * @return
55
+     */
56
+    public static List<Map<String, Object>> query(DataSource dataSource, String sql, Object[] params) {
57
+        Connection connection = getConn(dataSource);
58
+        PreparedStatement preparedStatement = null;
59
+        ResultSet resultSet = null;
60
+        try {
61
+            preparedStatement = connection.prepareStatement(sql);
62
+            if (params != null) {
63
+                for (int i = 0; i < params.length; i++) {
64
+                    preparedStatement.setObject(i + 1, params[i]);
65
+                }
66
+            }
67
+            resultSet = preparedStatement.executeQuery();
68
+
69
+            List<Map<String, Object>> ret = resultSetToList(resultSet);
70
+            return ret;
71
+        } catch (SQLException e) {
72
+            e.printStackTrace();
73
+        } finally {
74
+            release(connection, preparedStatement, resultSet);
75
+        }
76
+        return null;
77
+    }
78
+
79
+    private static List<Map<String, Object>> resultSetToList(ResultSet resultSet) throws SQLException {
80
+        if (resultSet == null) {
81
+            return Collections.EMPTY_LIST;
82
+        }
83
+
84
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); // 得到结果集(rs)的结构信息,比如字段数、字段名等
85
+        int columnCount = resultSetMetaData.getColumnCount(); // 返回此 ResultSet 对象中的列数
86
+
87
+        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
88
+        while (resultSet.next()) {
89
+            Map<String, Object> rowData = new HashMap<String, Object>(columnCount);
90
+            for (int i = 1; i <= columnCount; i++) {
91
+                rowData.put(resultSetMetaData.getColumnName(i), resultSet.getObject(i));
92
+            }
93
+            list.add(rowData);
94
+        }
95
+        return list;
96
+    }
97
+
98
+    /**
99
+     * release
100
+     * @param connection
101
+     * @param preparedStatement
102
+     * @param resultSet
103
+     */
104
+    public static void release(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
105
+        if (resultSet != null) {
106
+            try {
107
+                resultSet.close();
108
+            } catch (SQLException e) {
109
+                e.printStackTrace();
110
+            }
111
+        }
112
+        if (preparedStatement != null) {
113
+            try {
114
+                preparedStatement.close();
115
+            } catch (SQLException e) {
116
+                e.printStackTrace();
117
+            }
118
+        }
119
+        if (connection != null) {
120
+            try {
121
+                connection.close();
122
+            } catch (SQLException e) {
123
+                e.printStackTrace();
124
+            }
125
+        }
126
+    }
127
+
128
+}

+ 1 - 34
xxl-job-executor-example/pom.xml 查看文件

@@ -21,29 +21,7 @@
21 21
 			<artifactId>spring-webmvc</artifactId>
22 22
 			<version>${spring.version}</version>
23 23
 		</dependency>
24
-		<dependency>
25
-			<groupId>org.springframework</groupId>
26
-			<artifactId>spring-context-support</artifactId>
27
-			<version>${spring.version}</version>
28
-		</dependency>
29
-		<dependency>
30
-			<groupId>org.springframework</groupId>
31
-			<artifactId>spring-orm</artifactId>
32
-			<version>${spring.version}</version>
33
-		</dependency>
34
-		<dependency>
35
-			<groupId>org.springframework</groupId>
36
-			<artifactId>spring-test</artifactId>
37
-			<version>${spring.version}</version>
38
-		</dependency>
39
-		<!-- springframe end -->
40
-		<!-- aspectjweaver (support spring aop) -->
41
-		<dependency>
42
-			<groupId>org.aspectj</groupId>
43
-			<artifactId>aspectjweaver</artifactId>
44
-			<version>1.8.7</version>
45
-		</dependency>
46
-		
24
+
47 25
 		<!-- slf4j -->
48 26
 		<dependency>
49 27
 			<groupId>org.slf4j</groupId>
@@ -57,17 +35,6 @@
57 35
 			<artifactId>c3p0</artifactId>
58 36
 			<version>0.9.1.2</version>
59 37
 		</dependency>
60
-		<!-- mybatis-spring -->
61
-		<dependency>
62
-			<groupId>org.mybatis</groupId>
63
-			<artifactId>mybatis-spring</artifactId>
64
-			<version>1.2.2</version>
65
-		</dependency>
66
-		<dependency>
67
-			<groupId>org.mybatis</groupId>
68
-			<artifactId>mybatis</artifactId>
69
-			<version>3.2.8</version>
70
-		</dependency>
71 38
 		<!-- mysql-connector -->
72 39
 		<dependency>
73 40
 			<groupId>mysql</groupId>

+ 0 - 27
xxl-job-executor-example/src/main/java/com/xxl/job/executor/loader/DbGlueLoader.java 查看文件

@@ -1,27 +0,0 @@
1
-package com.xxl.job.executor.loader;
2
-
3
-import javax.annotation.Resource;
4
-
5
-import org.springframework.stereotype.Service;
6
-
7
-import com.xxl.job.core.glue.loader.GlueLoader;
8
-import com.xxl.job.executor.loader.dao.IXxlJobInfoDao;
9
-import com.xxl.job.executor.loader.dao.model.XxlJobInfo;
10
-
11
-/**
12
- * GLUE 代码加载器,推荐将该服务配置成RPC服务
13
- * @author xuxueli
14
- */
15
-@Service("dbGlueLoader")
16
-public class DbGlueLoader implements GlueLoader {
17
-
18
-	@Resource
19
-	private IXxlJobInfoDao xxlJobInfoDao;
20
-	
21
-	@Override
22
-	public String load(String job_group, String job_name) {
23
-		XxlJobInfo glue = xxlJobInfoDao.load(job_group, job_name);
24
-		return glue!=null?glue.getGlueSource():null;
25
-	}
26
-
27
-}

+ 0 - 13
xxl-job-executor-example/src/main/java/com/xxl/job/executor/loader/dao/IXxlJobInfoDao.java 查看文件

@@ -1,13 +0,0 @@
1
-package com.xxl.job.executor.loader.dao;
2
-
3
-import com.xxl.job.executor.loader.dao.model.XxlJobInfo;
4
-
5
-/**
6
- * job log for glue
7
- * @author xuxueli 2016-5-19 18:04:56
8
- */
9
-public interface IXxlJobInfoDao {
10
-	
11
-	public XxlJobInfo load(String jobGroup, String jobName);
12
-
13
-}

+ 0 - 33
xxl-job-executor-example/src/main/java/com/xxl/job/executor/loader/dao/impl/XxlJobInfoDaoImpl.java 查看文件

@@ -1,33 +0,0 @@
1
-package com.xxl.job.executor.loader.dao.impl;
2
-
3
-import java.util.HashMap;
4
-
5
-import javax.annotation.Resource;
6
-
7
-import org.mybatis.spring.SqlSessionTemplate;
8
-import org.springframework.stereotype.Repository;
9
-
10
-import com.xxl.job.executor.loader.dao.IXxlJobInfoDao;
11
-import com.xxl.job.executor.loader.dao.model.XxlJobInfo;
12
-
13
-
14
-/**
15
- * job log for glue
16
- * @author xuxueli 2016-5-19 18:17:52
17
- */
18
-@Repository
19
-public class XxlJobInfoDaoImpl implements IXxlJobInfoDao {
20
-
21
-	@Resource
22
-	public SqlSessionTemplate sqlSessionTemplate;
23
-
24
-	@Override
25
-	public XxlJobInfo load(String jobGroup, String jobName) {
26
-		HashMap<String, Object> params = new HashMap<String, Object>();
27
-		params.put("jobGroup", jobGroup);
28
-		params.put("jobName", jobName);
29
-		return sqlSessionTemplate.selectOne("XxlJobInfoMapper.load", params);
30
-	}
31
-	
32
-	
33
-}

+ 0 - 38
xxl-job-executor-example/src/main/java/com/xxl/job/executor/loader/dao/model/XxlJobInfo.java 查看文件

@@ -1,38 +0,0 @@
1
-package com.xxl.job.executor.loader.dao.model;
2
-
3
-/**
4
- * xxl-job info
5
- * @author xuxueli 2016-5-19 17:57:46
6
- */
7
-public class XxlJobInfo {
8
-	
9
-	private String jobGroup;
10
-	private String jobName;
11
-	
12
-	private String glueSource;
13
-
14
-	public String getJobGroup() {
15
-		return jobGroup;
16
-	}
17
-
18
-	public void setJobGroup(String jobGroup) {
19
-		this.jobGroup = jobGroup;
20
-	}
21
-
22
-	public String getJobName() {
23
-		return jobName;
24
-	}
25
-
26
-	public void setJobName(String jobName) {
27
-		this.jobName = jobName;
28
-	}
29
-
30
-	public String getGlueSource() {
31
-		return glueSource;
32
-	}
33
-
34
-	public void setGlueSource(String glueSource) {
35
-		this.glueSource = glueSource;
36
-	}
37
-	
38
-}

+ 0 - 40
xxl-job-executor-example/src/main/resources/applicationcontext-database.xml 查看文件

@@ -1,40 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<beans xmlns="http://www.springframework.org/schema/beans"
3
-	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-	   xsi:schemaLocation="http://www.springframework.org/schema/beans
5
-		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
6
-		
7
-	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
8
-		<property name="fileEncoding" value="utf-8" />
9
-		<property name="locations">
10
-			<list>
11
-				<value>classpath*:jdbc.properties</value>
12
-			</list>
13
-		</property>
14
-	</bean>
15
-
16
-	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  destroy-method="close">  
17
-	    <property name="driverClass" value="${c3p0.driverClass}" />  
18
-	    <property name="jdbcUrl" value="${c3p0.url}" />  
19
-	    <property name="user" value="${c3p0.user}" />  
20
-	    <property name="password" value="${c3p0.password}" />  
21
-	    <property name="initialPoolSize" value="3" />  
22
-	    <property name="minPoolSize" value="2" />  
23
-	    <property name="maxPoolSize" value="10" />  
24
-	    <property name="maxIdleTime" value="60" />
25
-	    <property name="acquireRetryDelay" value="1000" />
26
-	    <property name="acquireRetryAttempts" value="10" />
27
-	    <property name="preferredTestQuery" value="SELECT 1" />
28
-	</bean>
29
-	
30
-	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
31
-		<property name="dataSource" ref="dataSource" />
32
-		<property name="mapperLocations" value="classpath*:mybatis-mapper/*.xml"/>
33
-	</bean>
34
-    
35
-    <!-- scope must be "prototype" when junit -->
36
-    <bean id="sqlSessionTemplate"  class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">  
37
-          <constructor-arg index="0" ref="sqlSessionFactory" />  
38
-    </bean> 
39
-	
40
-</beans>

+ 37 - 3
xxl-job-executor-example/src/main/resources/applicationcontext-xxl-job.xml 查看文件

@@ -7,17 +7,51 @@
7 7
            http://www.springframework.org/schema/context
8 8
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">
9 9
 
10
+	<!-- scan job handler -->
10 11
 	<context:component-scan base-package="com.xxl.job.executor" />
11 12
 
12
-	<!-- 执行器 -->
13
+	<!-- 执行器
14
+	……………………………………………………………………………………………………………………
15
+	port : 执行器端口号
16
+	-->
13 17
 	<bean id="xxlJobExecutor" class="com.xxl.job.core.executor.jetty.XxlJobExecutor" init-method="start" destroy-method="destroy" >
14 18
 		<property name="port" value="9999" />
15 19
 	</bean>
16 20
 
17
-	<!-- glue factory -->
21
+	<!-- glue factory (开启GLUE任务时才需要, 否则可以删除)
22
+	……………………………………………………………………………………………………………………
23
+	cacheTimeout : GLUE任务示例缓存失效时间, 单位/ms
24
+	glueLoader : GLUE 代码加载器,推荐将该服务配置成RPC服务
25
+	dataSource : XXL-JOB公共数据源
26
+	-->
18 27
 	<bean id="glueFactory" class="com.xxl.job.core.glue.GlueFactory">
19 28
 		<property name="cacheTimeout" value="10000" />
20
-		<property name="glueLoader" ref="dbGlueLoader" />	<!-- GLUE 代码加载器,推荐将该服务配置成RPC服务 -->
29
+		<property name="glueLoader" >
30
+			<bean class="com.xxl.job.core.glue.loader.impl.DbGlueLoader" >
31
+				<property name="dataSource" ref="dataSource" />
32
+			</bean>
33
+		</property>
34
+	</bean>
35
+
36
+	<!-- XXL-JOB公共数据源 (开启GLUE任务时才需要, 否则可以删除) -->
37
+	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  destroy-method="close">
38
+		<property name="driverClass" value="${c3p0.driverClass}" />
39
+		<property name="jdbcUrl" value="${c3p0.url}" />
40
+		<property name="user" value="${c3p0.user}" />
41
+		<property name="password" value="${c3p0.password}" />
42
+		<property name="initialPoolSize" value="3" />
43
+		<property name="minPoolSize" value="2" />
44
+		<property name="maxPoolSize" value="10" />
45
+		<property name="maxIdleTime" value="60" />
46
+		<property name="acquireRetryDelay" value="1000" />
47
+		<property name="acquireRetryAttempts" value="10" />
48
+		<property name="preferredTestQuery" value="SELECT 1" />
49
+	</bean>
50
+	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
51
+		<property name="fileEncoding" value="utf-8" />
52
+		<property name="location">
53
+			<value>classpath:jdbc.properties</value>
54
+		</property>
21 55
 	</bean>
22 56
 
23 57
 </beans>

+ 0 - 26
xxl-job-executor-example/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml 查看文件

@@ -1,26 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
3
-	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
4
-<mapper namespace="XxlJobInfoMapper">
5
-	
6
-	<resultMap id="XxlJobInfo" type="com.xxl.job.executor.loader.dao.model.XxlJobInfo" >
7
-		<result column="job_group" property="jobGroup" />
8
-	    <result column="job_name" property="jobName" />
9
-	    <result column="glue_source" property="glueSource" />
10
-	</resultMap>
11
-
12
-	<sql id="Base_Column_List">
13
-		t.job_group,
14
-		t.job_name,
15
-		t.glue_source
16
-	</sql>
17
-	
18
-	<select id="load" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
19
-		SELECT <include refid="Base_Column_List" />
20
-		FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
21
-		WHERE t.job_group = #{jobGroup}
22
-			AND t.job_name = #{jobName}
23
-	</select>
24
-	
25
-	
26
-</mapper>