xueli.xue il y a 8 ans
Parent
commit
a5757be432

+ 4 - 3
README.md

@@ -88,11 +88,11 @@ XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/07162326_L3VB.png "在这里输入图片标题")
 
 #### 1.5 环境
-- Servlet/JSP Spec:3.0/2.2
-- Jdk:1.7+
+- JDK:1.7+
 - Tomcat:7+
+- Mysql:5.6+
+- Servlet/JSP Spec:3.0/2.2
 - Maven:3+
-- Mysql:5.5+
 
 
 ## 二、快速入门
@@ -717,6 +717,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
 - 3、执行器支持手动设置执行地址列表,提供开关切换使用注册地址还是手动设置的地址;
 - 4、执行器路由规则:第一个、循环、随机、顺序故障(默认)转移;
 - 5、CleanCode,清理无效的历史参数;
+- 6、规范系统配置数据,通过配置文件统一管理;
 
 #### TODO LIST
 - 1、支持脚本JOB(源码或指定路径), 即shell/python/php等, 日志实时输出并支持在线监控;定制JobHandler实现;

+ 2 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java

@@ -45,8 +45,8 @@ public class IndexController {
 	public ReturnT<String> loginDo(HttpServletRequest request, HttpServletResponse response, String userName, String password, String ifRemember){
 		if (!PermissionInterceptor.ifLogin(request)) {
 			if (StringUtils.isNotBlank(userName) && StringUtils.isNotBlank(password)
-					&& PropertiesUtil.getString("login.username").equals(userName) 
-					&& PropertiesUtil.getString("login.password").equals(password)) {
+					&& PropertiesUtil.getString("xxl.job.login.username").equals(userName)
+					&& PropertiesUtil.getString("xxl.job.login.password").equals(password)) {
 				boolean ifRem = false;
 				if (StringUtils.isNotBlank(ifRemember) && "on".equals(ifRemember)) {
 					ifRem = true;

+ 1 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java

@@ -35,7 +35,7 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
     
     // Scheduler
     private static Scheduler scheduler;
-    public static void setScheduler(Scheduler scheduler) {
+    public void setScheduler(Scheduler scheduler) {
 		XxlJobDynamicScheduler.scheduler = scheduler;
 	}
     

+ 19 - 20
xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MailUtil.java

@@ -1,13 +1,5 @@
 package com.xxl.job.admin.core.util;
 
-import java.io.File;
-import java.util.Properties;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeUtility;
-
 import org.apache.commons.lang.ArrayUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -15,6 +7,13 @@ import org.springframework.mail.javamail.JavaMailSender;
 import org.springframework.mail.javamail.JavaMailSenderImpl;
 import org.springframework.mail.javamail.MimeMessageHelper;
 
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeUtility;
+import java.io.File;
+import java.util.Properties;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
 /**
  * 邮件发送.Util
  * @author xuxueli 2016-3-12 15:06:20
@@ -29,12 +28,12 @@ public class MailUtil {
 	private static String sendFrom;
 	private static String sendNick;
 	static{
-		host = PropertiesUtil.getString("mail.host");
-		port = PropertiesUtil.getString("mail.port");
-		username = PropertiesUtil.getString("mail.username");
-		password = PropertiesUtil.getString("mail.password");
-		sendFrom = PropertiesUtil.getString("mail.sendFrom");
-		sendNick = PropertiesUtil.getString("mail.sendNick");
+		host = PropertiesUtil.getString("xxl.job.mail.host");
+		port = PropertiesUtil.getString("xxl.job.mail.port");
+		username = PropertiesUtil.getString("xxl.job.mail.username");
+		password = PropertiesUtil.getString("xxl.job.mail.password");
+		sendFrom = PropertiesUtil.getString("xxl.job.mail.sendFrom");
+		sendNick = PropertiesUtil.getString("xxl.job.mail.sendNick");
 	}
 	
 	/**
@@ -56,14 +55,14 @@ public class MailUtil {
 	/**
 	 * 发送邮件 (完整版)(结合Spring)
 	 * 
-	 * @param javaMailSender: 发送Bean
-	 * @param sendFrom		: 发送人邮箱
-	 * @param sendNick		: 发送人昵称
+	 * //@param javaMailSender: 发送Bean
+	 * //@param sendFrom		: 发送人邮箱
+	 * //@param sendNick		: 发送人昵称
 	 * @param toAddress		: 收件人邮箱
 	 * @param mailSubject	: 邮件主题
 	 * @param mailBody		: 邮件正文
 	 * @param mailBodyIsHtml: 邮件正文格式,true:HTML格式;false:文本格式
-	 * @param files[]		: 附件
+	 * @param attachments	: 附件
 	 */
 	@SuppressWarnings("null")
 	public static boolean sendMailSpring(String toAddress, String mailSubject, String mailBody, boolean mailBodyIsHtml,File[] attachments) {
@@ -106,8 +105,8 @@ public class MailUtil {
 	 * @param mailSubject	: 邮件主题
 	 * @param mailBody		: 邮件正文
 	 * @param mailBodyIsHtml: 邮件正文格式,true:HTML格式;false:文本格式
-	 * @param inLineFile	: 内嵌文件
-	 * @param files[]		: 附件
+	 * //@param inLineFile	: 内嵌文件
+	 * @param attachments	: 附件
 	 */
 	public static boolean sendMail (String toAddress, String mailSubject, String mailBody, 
 			boolean mailBodyIsHtml, File[] attachments){

+ 5 - 6
xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/PropertiesUtil.java

@@ -1,26 +1,25 @@
 package com.xxl.job.admin.core.util;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.URL;
 import java.util.Properties;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * properties util
  * @author xuxueli 2015-8-28 10:35:53
  */
 public class PropertiesUtil {
 	private static Logger logger = LoggerFactory.getLogger(PropertiesUtil.class);
-	private static final String file_name = "config.properties";
+	private static final String file_name = "xxl-job-admin.properties";
 	
 	/**
 	 * load properties
 	 * @param propertyFileName
-	 * @param ifClassPath
 	 * @return
 	 */
 	public static Properties loadProperties(String propertyFileName) {
@@ -55,7 +54,7 @@ public class PropertiesUtil {
 	}
 	
 	public static void main(String[] args) {
-		System.out.println(getString("triggerLogUrl"));
+		System.out.println(getString("xxl.job.login.username"));
 	}
 
 }

+ 89 - 70
xxl-job-admin/src/main/resources/applicationcontext-database.xml → xxl-job-admin/src/main/resources/applicationcontext-xxl-job-admin.xml

@@ -1,71 +1,90 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	   xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
-	   xsi:schemaLocation="http://www.springframework.org/schema/beans
-		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
-		http://www.springframework.org/schema/aop 
-		http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
-		http://www.springframework.org/schema/tx 
-		http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
-	
-	
-	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
-		<property name="fileEncoding" value="utf-8" />
-		<property name="locations">
-			<list>
-				<value>classpath*:jdbc.properties</value>
-			</list>
-		</property>
-	</bean>
-
-	<!-- part 1 :for datasource -->
-	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  destroy-method="close">  
-	    <property name="driverClass" value="${c3p0.driverClass}" />  
-	    <property name="jdbcUrl" value="${c3p0.url}" />  
-	    <property name="user" value="${c3p0.user}" />  
-	    <property name="password" value="${c3p0.password}" />  
-	    <property name="initialPoolSize" value="3" />  
-	    <property name="minPoolSize" value="2" />  
-	    <property name="maxPoolSize" value="10" />  
-	    <property name="maxIdleTime" value="60" />
-	    <property name="acquireRetryDelay" value="1000" />
-	    <property name="acquireRetryAttempts" value="10" />
-	    <property name="preferredTestQuery" value="SELECT 1" />
-	</bean>
-	
-	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
-		<property name="dataSource" ref="dataSource" />
-		<property name="mapperLocations" value="classpath:mybatis-mapper/*.xml"/>
-	</bean>
-    
-    <!-- scope must be "prototype" when junit -->
-    <bean id="sqlSessionTemplate"  class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">  
-          <constructor-arg index="0" ref="sqlSessionFactory" />  
-    </bean> 
-    
-    <!-- part 2 :for tx -->
-    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
-		<property name="dataSource" ref="dataSource" />
-	</bean>
-      
-	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
-	
-	<tx:advice id="txAdvice" transaction-manager="transactionManager">
-		<tx:attributes>
-			<tx:method name="detail*" propagation="SUPPORTS" />
-			<tx:method name="visit*" propagation="SUPPORTS" />
-			<tx:method name="get*" propagation="SUPPORTS" />
-			<tx:method name="find*" propagation="SUPPORTS" />
-			<tx:method name="check*" propagation="SUPPORTS" />
-			<tx:method name="list*" propagation="SUPPORTS" />
-			<tx:method name="*" propagation="REQUIRED" rollback-for="exception" />
-		</tx:attributes>
-	</tx:advice>
-
-	<aop:config>
-		<aop:pointcut id="txoperation" expression="execution(* com.xxl.job.admin.service.impl.*.*(..))" />
-		<aop:advisor pointcut-ref="txoperation" advice-ref="txAdvice" />
-	</aop:config>
-	
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	   xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
+	   xsi:schemaLocation="http://www.springframework.org/schema/beans
+		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+		http://www.springframework.org/schema/aop 
+		http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
+		http://www.springframework.org/schema/tx 
+		http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
+	
+	
+	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+		<property name="fileEncoding" value="utf-8" />
+		<property name="locations">
+			<list>
+				<value>classpath*:xxl-job-admin.properties</value>
+			</list>
+		</property>
+	</bean>
+
+	<!-- part 1 :for datasource -->
+	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  destroy-method="close">  
+	    <property name="driverClass" value="${xxl.job.db.driverClass}" />
+	    <property name="jdbcUrl" value="${xxl.job.db.url}" />
+	    <property name="user" value="${xxl.job.db.user}" />
+	    <property name="password" value="${xxl.job.db.password}" />
+	    <property name="initialPoolSize" value="3" />  
+	    <property name="minPoolSize" value="2" />  
+	    <property name="maxPoolSize" value="10" />  
+	    <property name="maxIdleTime" value="60" />
+	    <property name="acquireRetryDelay" value="1000" />
+	    <property name="acquireRetryAttempts" value="10" />
+	    <property name="preferredTestQuery" value="SELECT 1" />
+	</bean>
+	
+	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
+		<property name="dataSource" ref="dataSource" />
+		<property name="mapperLocations" value="classpath:mybatis-mapper/*.xml"/>
+	</bean>
+    
+    <!-- scope must be "prototype" when junit -->
+    <bean id="sqlSessionTemplate"  class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">  
+          <constructor-arg index="0" ref="sqlSessionFactory" />  
+    </bean> 
+    
+    <!-- part 2 :for tx -->
+    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
+		<property name="dataSource" ref="dataSource" />
+	</bean>
+      
+	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
+	
+	<tx:advice id="txAdvice" transaction-manager="transactionManager">
+		<tx:attributes>
+			<tx:method name="detail*" propagation="SUPPORTS" />
+			<tx:method name="visit*" propagation="SUPPORTS" />
+			<tx:method name="get*" propagation="SUPPORTS" />
+			<tx:method name="find*" propagation="SUPPORTS" />
+			<tx:method name="check*" propagation="SUPPORTS" />
+			<tx:method name="list*" propagation="SUPPORTS" />
+			<tx:method name="*" propagation="REQUIRED" rollback-for="exception" />
+		</tx:attributes>
+	</tx:advice>
+
+	<aop:config>
+		<aop:pointcut id="txoperation" expression="execution(* com.xxl.job.admin.service.impl.*.*(..))" />
+		<aop:advisor pointcut-ref="txoperation" advice-ref="txAdvice" />
+	</aop:config>
+
+	<!-- part 3 :for quartz -->
+	<bean id="quartzScheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
+		<property name="dataSource" ref="dataSource" />
+		<property name="autoStartup" value="true" />	<!--自动启动 -->
+		<property name="startupDelay" value="20" />		<!--延时启动 -->
+		<property name="applicationContextSchedulerContextKey"  value="applicationContextKey" />
+		<property name="configLocation" value="classpath:quartz.properties"/>
+	</bean>
+
+	<!-- 协同-调度器 -->
+	<bean id="xxlJobDynamicScheduler" class="com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler" init-method="init" destroy-method="destroy" >
+		<!-- (轻易不要变更“调度器名称”, 任务创建时会绑定该“调度器名称”) -->
+		<property name="scheduler" ref="quartzScheduler"/>
+		<!-- 调度中心回调IP[选填],为空则自动获取 -->
+		<property name="callBackIp" value="${xxl.job.callBackIp}"/>
+		<!-- 调度中心回调端口号 -->
+		<property name="callBackPort" value="${xxl.job.callBackPort}"/>
+	</bean>
+	
 </beans>

+ 0 - 26
xxl-job-admin/src/main/resources/applicationcontext-xxl-job.xml

@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	   xsi:schemaLocation="http://www.springframework.org/schema/beans
-           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
-
-	<!-- quartz-调度器 -->
-	<bean id="quartzScheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
-		<property name="dataSource" ref="dataSource" />
-        <property name="autoStartup" value="true" />	<!--自动启动 -->
-        <property name="startupDelay" value="20" />		<!--延时启动 -->
-		<property name="applicationContextSchedulerContextKey"  value="applicationContextKey" /> 
-        <property name="configLocation" value="classpath:quartz.properties"/>
-	</bean>
-	
-	<!-- 协同-调度器 -->
-	<bean id="dynamicSchedulerUtil" class="com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler" init-method="init" destroy-method="destroy" >
-		<!-- (轻易不要变更“调度器名称”, 任务创建时会绑定该“调度器名称”) -->
-        <property name="scheduler" ref="quartzScheduler"/>
-		<!-- 调度中心回调IP[选填],为空则自动获取 -->
-		<!--<property name="callBackIp" value=""/>-->
-		<!-- 调度中心回调端口号 -->
-        <property name="callBackPort" value="8888"/>
-    </bean>
-
-</beans>

+ 0 - 11
xxl-job-admin/src/main/resources/config.properties

@@ -1,11 +0,0 @@
-# for email
-mail.host=smtp.163.com
-mail.port=25
-mail.username=ovono802302@163.com
-mail.password=asdfzxcv
-mail.sendFrom=ovono802302@163.com
-mail.sendNick=《任务调度平台XXL-JOB》
-
-# for login
-login.username=admin
-login.password=123456

+ 0 - 4
xxl-job-admin/src/main/resources/jdbc.properties

@@ -1,4 +0,0 @@
-c3p0.driverClass=com.mysql.jdbc.Driver
-c3p0.url=jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&amp;characterEncoding=UTF-8
-c3p0.user=root
-c3p0.password=root_pwd

+ 21 - 0
xxl-job-admin/src/main/resources/xxl-job-admin.properties

@@ -0,0 +1,21 @@
+### xxl-job db
+xxl.job.db.driverClass=com.mysql.jdbc.Driver
+xxl.job.db.url=jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&amp;characterEncoding=UTF-8
+xxl.job.db.user=root
+xxl.job.db.password=root_pwd
+
+### xxl-job callback address
+xxl.job.callBackIp=
+xxl.job.callBackPort=8888
+
+### xxl-job email
+xxl.job.mail.host=smtp.163.com
+xxl.job.mail.port=25
+xxl.job.mail.username=ovono802302@163.com
+xxl.job.mail.password=asdfzxcv
+xxl.job.mail.sendFrom=ovono802302@163.com
+xxl.job.mail.sendNick=《任务调度平台XXL-JOB》
+
+# xxl-job login
+xxl.job.login.username=admin
+xxl.job.login.password=123456