在项目中,我们经常会遇到编写一些脚本。在我们常见的印象中,使用python编写脚本比较好,但是对于java人员来说,可能不太熟悉python,因此我们需要使用java来编写脚本。
使用java编写脚本的时候会有两种情况
1、编写一个web项目,使用使用schduel定时跑
2、编写一个普通的java项目,直接java -jar 执行即可。
针对以上两个,编写一个web项目一般都不太现实,但是却又是很多公司内部大部分从事web开发curd的研发人员常用的,个人在公司内部是不允许这样子去写脚本的,因此使用第二种方案是最常用的。
使用第二种方案的时候,我们如果要写数据库,操作redis等是不是都还的编写传统的jdbc呢?其实不然,我们既然使用spring 那么熟练,因此在这里我们直接使用spring注入即可。不多说,直接编码。
1、创建一个maven的项目
data_sync_task
2、添加maven依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.0.0.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.17</version> </dependency> <!-- log start --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.6</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.4</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.44</version> </dependency> <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-http --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-http</artifactId> <version>5.7.19</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.11.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.22</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/commons-net/commons-net --> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.8.0</version> </dependency> <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.13</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> <testFailureIgnore>true</testFailureIgnore> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.1</version> <executions> <!-- Run shade goal on package phase --> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
3、创建一个SpringUtil.java,详细代码如下:
package com.gy.police.utils;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringUtil {
//private static BeanFactory factory;
private static AbstractApplicationContext factory;
/**
* 默认的spring配置文件
*/
public static Object getBean(String beanName) {
if (factory == null) {
synchronized (SpringUtil.class) {
if (factory == null) {
// 加载默认位置的spring配置
setFactory("beans.xml");
}
}
}
return factory.getBean(beanName);
}
public static BeanFactory getFactory() {
return factory;
}
public static void setFactory(AbstractApplicationContext factory) {
SpringUtil.factory = factory;
}
public static void setFactory(String classPathXml) {
factory = new ClassPathXmlApplicationContext(classPathXml);
}
public static void close() {
factory.close();
}
}4、在src/main/resources目录下,创建一个beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
<!-- 加载 properties 文件 -->
<bean id="config"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="fileEncoding" value="utf-8"/>
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="locations">
<list>
<value>conf.properties</value>
<value>jdbc.properties</value>
</list>
</property>
</bean>
<!-- 这里需要改下src/main/java下面的包,纳入spring的扫描里面去 -->
<context:component-scan base-package="com.test.task.*"/>
<task:executor id="executor" pool-size="5"/>
<task:scheduler id="scheduler" pool-size="10"/>
<task:annotation-driven executor="executor" scheduler="scheduler"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="filters" value="${cpool.filters}"/>
<property name="maxActive" value="${cpool.maxPoolSize}"/>
<property name="initialSize" value="${cpool.minPoolSize}"/>
<property name="maxWait" value="${cpool.maxWait}"/>
<property name="minIdle" value="${cpool.minPoolSize}"/>
<property name="timeBetweenEvictionRunsMillis" value="${cpool.idleConnectionTestPeriod}"/>
<property name="minEvictableIdleTimeMillis" value="${cpool.maxIdleTime}"/>
<property name="validationQuery" value="${cpool.validationQuery}"/>
<property name="testWhileIdle" value="${cpool.testWhileIdle}"/>
<property name="testOnBorrow" value="${cpool.testOnBorrow}"/>
<property name="testOnReturn" value="${cpool.testOnReturn}"/>
<property name="breakAfterAcquireFailure" value="${cpool.breakAfterAcquireFailure}"/>
</bean>
<!-- JDBC处理模版,该类是对JDBC一些增删改查操作的封装。 -->
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<mybatis:scan base-package="com.gy.police.mappers"
factory-ref="sqlSessionFactory"/>
</beans>5、在src/main/resources下面创建一个 conf.properties文件,示例如下:
## redis config redis.server.uri=redis://192.168.31.20:6379 redis.server.password=123456
这里根据自己的实际需要,把代码里面@Values("${aaa.aaaa}")配置到这里就可以了
6、在src/main/resources下面创建一个jdbc.properties文件,示例如下:
######################################################### jdbc.driverClass=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://13.200.128.8:3306/test?allowMultiQueries=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull jdbc.username=root jdbc.password=123456 jdbc.autoCommitOnClose=true cpool.checkoutTimeout=5000 cpool.acquireRetryAttempts=5 cpool.breakAfterAcquireFailure=false cpool.minPoolSize=1 cpool.maxPoolSize=5 cpool.maxIdleTime=8000 cpool.idleConnectionTestPeriod=8000 cpool.maxIdleTimeExcessConnections=1800 cpool.acquireIncrement=5 cpool.maxWait=60000 cpool.filters=stat cpool.testWhileIdle=true cpool.testOnBorrow=false cpool.testOnReturn=false cpool.validationQuery=select 1
7、编写一个task类,PoliceReviceTask.java
package com.test.task;
@Component
@Slf4j
@Scope()
public class PoliceReviceTask {
public void uploadData() {
}
}8、编写运行类,运行代码
package com.test.task.sync;
public class XueliangDataReport {
public static void main(String[] args) {
//上传设备的数据
PoliceReviceTask uploadTask= (PoliceReviceTask ) SpringUtil.getBean("policeReviceTask ");
uploadTask.uploadData();
SpringUtil.close();
}
}以上就完成了一个脚本项目的框架,实际的脚本业务在PoliceReviceTask.java里面编写就可以了。

还没有评论,来说两句吧...