Javac 編譯包含 import 第三方jar包的.java 檔案
阿新 • • 發佈:2019-01-21
昨天遇到了一個奇葩的需求:把偽造的資料持久化到Linux伺服器的Redis中
要說的話,其實也是很簡單的。大概有那麼幾種方法可以例項化到Redis中。
- 直接在Linux上使用Redis 命令把相應的key值和value值寫入。
- 寫一個.java的方法,使用jedis 把相應的key 和value寫入到Redis中
但是,由於資料條數很多,且都是比較長的JSON字串。所以我不大可能會直接在Linux上操作Redis客戶端。所以簡便有效的方式就是寫一個.java 檔案批量處理然後寫入。
那麼問題來了:
我的.java檔案需要在Linux上使用javac編譯並執行。
但是由於我的java檔案中import有第三方jar的內容,直接進行javac編譯的話會報錯。
程式碼如下:
package com.example;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List ;
import java.util.regex.Pattern;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
public class AddCompleteInfo {
static ShardedJedisPool pool;
static {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(100);
config.setMaxIdle(20); // 物件最大空閒時間
config.setMaxWaitMillis(5000); // 獲取物件最大等待時間。
config.setTestOnBorrow(true);
String host = "127.0.0.1";
int port = 6379;
List<JedisShardInfo> jdsInfoList = new ArrayList<JedisShardInfo>(2);
JedisShardInfo infoA = new JedisShardInfo(host, port);
jdsInfoList.add(infoA);
pool = new ShardedJedisPool(config, jdsInfoList);
}
public static void main(String[] args) {
String file = "/testJva/infroad.txt";
String reader = AddCompleteInfo.reader(file);
Pattern p = Pattern.compile("&");
String[] split = p.split(reader);
for (String string : split) {
System.out.println("分開的值是:"+string);
JSONObject parseObject = JSON.parseObject(string);
String token = parseObject.getString("token");
System.out.println("token的值是:"+token);
ShardedJedis jedis = pool.getResource();
jedis.set(token, string);
jedis.sadd("ALLTOKEN", token);
jedis.sadd("COMPLETED", token);
if (jedis != null)
jedis.close();
}
public static String reader(String filePath) {
try {
File file = new File(filePath);
if (file.isFile() && file.exists()) {
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = bufferedReader.readLine();
while (lineTxt != null) {
return lineTxt;
}
}
} catch (UnsupportedEncodingException | FileNotFoundException e) {
System.out.println("Cannot find the file specified!");
e.printStackTrace();
} catch (IOException e) {
System.out.println("Error reading file content!");
e.printStackTrace();
}
return null;
}
}
最後使用Eclipse將只包含主要程式碼的java專案,打成一個Runnable JAR file的 jar包
然後在Linux上使用,java -jar + jar包名稱 的方式來執行,這樣,就可以直接使得.java檔案中的main方法執行下去
具體的過程看下圖:
在晚上上述三步之後,就完成了編譯的過程。接著需要把輸出的jar包上傳到伺服器上進行執行。
infroad.txt 這個裡面是包含了我json字串的檔案,裡面每一段json都是按照&作為分割符號進行分割的。具體看程式碼
然後使用命令列執行這個jar檔案即可。
java -jar kkkkkkkskk.jar