在项目中,我们经常会遇到编写一些脚本。在我们常见的印象中,使用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里面编写就可以了。
还没有评论,来说两句吧...