上班打卡--- 通过批处理命令执行jar文件来记录上班时间

如果 一个程序员要记录自己上班工作时间的话 ,还需要靠手动去记录, 那就有点 不够范了, 程序员自然要有自己的极客范儿 , 下面就跟我一起来(zhuangbi);

先列一下整体的步骤:

1: 先做一个jar文件, 通过执行这个jar文件可以将上下班时间 写入数据库中;

2: 再写一个批处理脚本,能通过批处理命令来执行这个jar文件;

3: 将批处理文件做开机启动执行处理;

1: 先写一个可执行jar:

原理: 通过jdbc操作数据库,

那就上代码吧:

项目目录结构:

pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.etoak</groupId>
    <artifactId>daka</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc14</artifactId>
            <version>10.2.0.4.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
                <dependencies>
                    <!-- 解决sun base64编译报错 -->
                    <dependency>
                        <groupId>org.codehaus.plexus</groupId>
                        <artifactId>plexus-compiler-javac</artifactId>
                        <version>1.8.1</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <!--主类入口的路径-->
                            <mainClass>com.etoak.Daka</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
PropertiesUtil 类 :

package com.etoak.util;

import java.io.*;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Properties;

public class PropertiesUtil {

/**     * 根据属性文件路径获取所有的属性键值对     * @param propertiesFilePath     * @return     * @throws IOException     */    public static Properties getProperties(String propertiesFilePath) throws IOException {        Properties props = new Properties();        InputStream in = null;        try {            //第一种,通过类加载器进行获取properties文件流            in = PropertiesUtil.class.getClassLoader().getResourceAsStream(propertiesFilePath);            //第二种,通过类进行获取properties文件流            //in = PropertiesFileUtil.class.getResourceAsStream("/"+propertiesFilePath);            props.load(new InputStreamReader(in, "utf-8"));        } finally {            if (null != in) {                in.close();            }        }        return props;    }

/**     * 根据属性文件路径和属性的键获取属性的值     * @param propertiesFilePath     * @param key     * @return     * @throws IOException     */    public static String getProperty(String propertiesFilePath, String key) throws IOException {        Properties props = getProperties(propertiesFilePath);        return props.getProperty(key);    }

/**     * 写Properties文件     */    public static void writePropertiesFile(Map<String,String> propsMap , String outputPropertiesFilePath) throws Exception {

if(propsMap.isEmpty() || propsMap.containsKey("") ){            throw  new Exception("传入的键值对不能为空且键值对的主键不能包含空!");        }

if( !outputPropertiesFilePath.endsWith(".properties")){            throw  new Exception("输出文件路径需要以.properties为结尾!");        }

//文件路径的文件夹不存在则创建        String fileSeparator = File.separator;        String dirPath = outputPropertiesFilePath.substring(0,outputPropertiesFilePath.lastIndexOf(fileSeparator)) ;        if( !new File(dirPath).exists()){            new File(dirPath).mkdirs();        }

Properties prop = new Properties() ;        Iterator<Map.Entry<String, String>> it = propsMap.entrySet().iterator();        while(it.hasNext()){            Map.Entry<String, String>  entry = it.next();            prop.setProperty( entry.getKey(),entry.getValue());        }

FileOutputStream oFile = null ;        try {            //保存属性到b.properties文件            oFile = new FileOutputStream(outputPropertiesFilePath, false);//true表示追加打开,false每次都是清空再重写            //prop.store(oFile, "此参数是保存生成properties文件中第一行的注释说明文字");//这个会两个地方乱码            //prop.store(new OutputStreamWriter(oFile, "utf-8"), "汉字乱码");//这个就是生成的properties文件中第一行的注释文字乱码            prop.store(new OutputStreamWriter(oFile, "utf-8"), null);        } catch (Exception e) {            e.printStackTrace();        } finally {            if (oFile != null ) {                oFile.close();            }        }    }

public static void main(String[] args) throws Exception {        String propertiesFilePath = "properties/userinfo.properties";        Properties props = getProperties(propertiesFilePath);        Iterator<String> it = props.stringPropertyNames().iterator();        Map<String,String> propsMap = new HashMap<String,String>();        while (it.hasNext()) {            String key = it.next();            String value = props.getProperty(key) ;            System.out.println(key + ":" + value);            propsMap.put(key,value);        }        writePropertiesFile(propsMap,"C:\\Users\\Administrator\\Desktop\\properties\\userinfo2.properties");

}}
 
ConnectionUtil 类:
package com.etoak.util;

import java.io.IOException;
import java.sql.*;
import java.util.Properties;

public class ConnectionUtil {

    //获得链接
    public static  Connection getConn(String propertiesFilePath) throws ClassNotFoundException, SQLException, IOException {
        Properties props = PropertiesUtil.getProperties(propertiesFilePath);
        Class.forName(props.getProperty("driver"));
        return DriverManager.getConnection(props.getProperty("url"), props.getProperty("user"), props.getProperty("password"));
    }

    //释放链接
    public static void release(Connection conn, Statement st, PreparedStatement pst, ResultSet rs) throws SQLException {
        if (rs != null) {
            try {
                rs.close();
            } finally {
                try {
                    if (st != null) {
                        st.close();
                    } else if (pst != null) {
                        pst.close();
                    }
                } finally {
                    if (conn != null) {
                        conn.close();
                    }
                }
            }
        }
    }
}

Daka类:

package com.etoak;

import com.etoak.util.ConnectionUtil;
import com.etoak.util.PropertiesUtil;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Calendar;

public class Daka {

    public static void daka(String jdbcPropertiesFilePath, String userinfoPropertiesFilePath) throws SQLException, ClassNotFoundException, IOException {

        //用户名
        String name = PropertiesUtil.getProperty(userinfoPropertiesFilePath, "username");
        String[] xqArr = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        Calendar calendar = Calendar.getInstance();//可以对每个时间域单独修改
        int day = calendar.get(Calendar.DAY_OF_WEEK) - 1;
        String xq = xqArr[day];
        String flag = "0";
        int hour = calendar.get(Calendar.HOUR_OF_DAY);

        if (day == 0 || day == 6) {
            flag = "3"; //周末加班
        } else {
            if (hour <= 19) {
                flag = "1"; // 平时正常点上下班
            } else {
                flag = "2"; // 平时加班
            }
        }

        /* 持久化到数据库中*/
        Connection conn = ConnectionUtil.getConn(jdbcPropertiesFilePath);
        String insertSql = "insert into WORKTIMERECODE (recordId , name , rq , xq , flag , workstartTime , workendTime ) select  " +
                " sys_guid() , ‘" + name + "‘ , trunc(sysdate,‘dd‘) , ‘" + xq + "‘ , ‘" + flag + "‘ , to_char(trunc(sysdate,‘mi‘),‘hh24:mi‘) , to_char(trunc(sysdate,‘mi‘),‘hh24:mi‘) from dual ";
        String updateSql = "update WORKTIMERECODE set (flag, workendtime ) = ( select ‘" + flag + "‘ ,  to_char(trunc(sysdate,‘mi‘),‘hh24:mi‘) from dual ) where rq = trunc(sysdate,‘dd‘) ";

        Statement st = conn.createStatement();
        int un = st.executeUpdate(updateSql);
        if (un == 0) {
            st.executeUpdate(insertSql);
        }
        ConnectionUtil.release(conn, st, null, null);
    }

    public static void main(String[] args) throws SQLException, ClassNotFoundException, IOException {
        String jdbcPropertiesFilePath = "properties/jdbc.properties";
        String userinfoPropertiesFilePath = "properties/userinfo.properties";
        daka(jdbcPropertiesFilePath,userinfoPropertiesFilePath);
        System.out.println(Calendar.getInstance().getTime() +"  SUCCESSED");
    }

}

执行Maven clean  >> Maven install >> Maven package ;

使用这个带依赖关系的jar包,并更名为daka.jar ;

先使用 cmd 命令行执行一下 ;

执行结果如下, 没有报错说明执行成功了;

2: 写批处理脚本;

echo off
cd/d "C:\Users\Administrator\Desktop"
java -jar daka.jar
pause

上面脚本的注释:

1: echo off  :关闭打印输出;

2: cd/d 打开目录 "C:\Users\Administrator\Desktop"  目录文件路径;

3: java -jar daka.jar  执行 daka.jar 的 cmd命令 ;

4: pause 暂停 ; 不然的话 就会一闪而过 ;

OK  执行结果如下:

3: 再下面一步: 设置成为开机启动时执行:

将脚本放到开机启动的文件夹下即可开机启动:

如果找不到路径 有肯能是隐藏了; 需要显示隐藏文件;

下面是源代码:

https://pan.baidu.com/s/1dE3OGUX

jjs9

时间: 2024-12-11 12:51:03

上班打卡--- 通过批处理命令执行jar文件来记录上班时间的相关文章

SQL Server数据库备份:通过Windows批处理命令执行

通过Windows批处理命令执行SQL Server数据库备份 建立mybackup.bat ,输入以下内容直接运行该脚本,即可开始自动备份数据库也可把该脚本加入windows任务计划里执行. ----------------------------------------------------------------------------@echo off set path=%path%;C:Program Files\Microsoft SQL Server\80\Tools\Binn

linux怎么执行jar文件 怎么打可执行的jar包

Linux下执行jar文件方法:命令行下进入文件目录,执行java -jar file.jar即可,也可在桌面创建一个启动器,在命令栏填写相关的命令:java -jar /file路径/file.jar,这样在桌面双击即可打开该jar文件 创建可执行的 JAR 文件包详解:JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式.JAR 文件非常类似 ZIP 文件--准确的说,它就是 ZIP 文件,所以叫它文件包.JAR 文

Java应用程序可执行jar文件与服务器交互中文乱码

生成可执行jar文件后,直接双击打开应用,发送Http请求带有中文时,服务器接收到的中文乱码! 解决方式: 1.在cmd命令中执行javaw命令打开jar可执行应用: 打开cmd命令框,输入: javaw -Dfile.encoding=utf-8 -jar D:/client-tool/mobile-client.jar 2.自己编写一个批处理文件打开jar可执行应用: 文件内容: start javaw -Dfile.encoding=utf-8 -jar D:/client-tool/mo

maven 构建可执行jar文件

第一部分:认识jar中的MANIFEST.MF文件 一.MANIFEST.MF文件的基本配置信息: 1.一般属性: Manifest-Version:定义manifest文件的版本 Created-By:定义该文件的生成者,一般是由jar命令行工具生成 Signature-Version:定义jar文件的签名版本(关于jar文件的签名以后详谈) Class-Path:(具体作用在下面讲) 2.应用程序相关属性: Main-Class:定义jar文件的入口类(该类必须是一个可执行的类):定义该属性

11) 生成可执行jar文件 maven-shade-plugin

搜索 site:maven.apache.org maven-assembly-plugin http://maven.apache.org/plugins/maven-assembly-plugin/usage.html All goals except assembly:single have been deprecated. 以上不能使用,以下可以. http://maven.apache.org/plugins/maven-shade-plugin/ examples Executabl

cocos2d-x教程3:用php或DOS批处理命令来转换文件和解压缩zip

tinyurl.com/nrxcsea tinyurl.com/nanqhzt tinyurl.com/l2wh6kg tinyurl.com/o3ekj2w tinyurl.com/q3865ld tinyurl.com/ny2gcsw tinyurl.com/o8cabvz tinyurl.com/or7pq8t tinyurl.com/lokv5dw tinyurl.com/pecmpqm tinyurl.com/kafpj4l tinyurl.com/orlulbc tinyurl.co

commondline 之三 执行jar文件

java [-options] -jar jarfile [args...] 点击查看获取可执行jar文件方法

MySQL命令执行sql文件的两种方法

MySQL命令执行sql文件的两种方法 摘要:和其他数据库一样,MySQL也提供了命令执行sql脚本文件,方便地进行数据库.表以及数据等各种操作.下面笔者讲解MySQL执行sql文件命令的两种方法,希望能给刚开始学习 MySQL 数据库的朋友们. 学习过 SQLServer 或 Oracle 的朋友会知道,sql 脚本是包含一到多个 sql 命令的 sql 语句集合,我们可以将这些 sql 脚本放在一个文本文件中(我们称之为“sql 脚本文件”),然后通过相关的命令执行这个 sql 脚本文件.基

怎么用命令行执行jar文件

如果你配置好了jre环境,你现在有一个打包好的jar文件,你可以这样子开始执行 java -classpath example.jar mainClass -classpath告诉虚拟机在哪里找类的字节码,顺便提一下虚拟机加载类是lazy加载的,只有用到的时候才加载,虚拟机按照以下顺序进行搜索和加载: 1 bootstrap classes,基础类,如Java的library类 2 extension classes,扩展类,如/jre/lib/ext下的类 3 user-defined cla