Compare commits
7 Commits
完善日志功能
...
54d73db62f
Author | SHA1 | Date | |
---|---|---|---|
54d73db62f | |||
8149e21e2f | |||
2847747f53 | |||
2dbe40b7a8 | |||
566809868a | |||
e5be1e0b66 | |||
5672c83a71 |
98
.gitignore
vendored
98
.gitignore
vendored
@@ -1,6 +1,102 @@
|
|||||||
|
|
||||||
|
target/*
|
||||||
|
*.jar
|
||||||
|
|
||||||
|
# ---> C++
|
||||||
|
# Prerequisites
|
||||||
|
*.d
|
||||||
|
|
||||||
|
# Compiled Object files
|
||||||
|
*.slo
|
||||||
|
*.lo
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
|
||||||
|
# Precompiled Headers
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
|
# Compiled Dynamic libraries
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
*.dll
|
||||||
|
|
||||||
|
# Fortran module files
|
||||||
|
*.mod
|
||||||
|
*.smod
|
||||||
|
|
||||||
|
# Compiled Static libraries
|
||||||
|
*.lai
|
||||||
|
*.la
|
||||||
|
*.a
|
||||||
|
*.lib
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
|
||||||
|
# ---> CMake
|
||||||
|
CMakeLists.txt.user
|
||||||
|
CMakeCache.txt
|
||||||
|
CMakeFiles
|
||||||
|
CMakeScripts
|
||||||
|
Testing
|
||||||
|
Makefile
|
||||||
|
cmake_install.cmake
|
||||||
|
install_manifest.txt
|
||||||
|
compile_commands.json
|
||||||
|
CTestTestfile.cmake
|
||||||
|
_deps
|
||||||
|
|
||||||
|
# ---> Java
|
||||||
|
# Compiled class file
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# Log file
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# BlueJ files
|
||||||
|
*.ctxt
|
||||||
|
|
||||||
|
# Mobile Tools for Java (J2ME)
|
||||||
|
.mtj.tmp/
|
||||||
|
|
||||||
|
# Package Files #
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.nar
|
||||||
|
*.ear
|
||||||
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
*.rar
|
||||||
|
|
||||||
|
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||||
|
hs_err_pid*
|
||||||
|
replay_pid*
|
||||||
|
|
||||||
|
# ---> Maven
|
||||||
|
target/
|
||||||
|
pom.xml.tag
|
||||||
|
pom.xml.releaseBackup
|
||||||
|
pom.xml.versionsBackup
|
||||||
|
pom.xml.next
|
||||||
|
release.properties
|
||||||
|
dependency-reduced-pom.xml
|
||||||
|
buildNumber.properties
|
||||||
|
.mvn/timing.properties
|
||||||
|
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
|
||||||
|
.mvn/wrapper/maven-wrapper.jar
|
||||||
|
|
||||||
|
# Eclipse m2e generated files
|
||||||
|
# Eclipse Core
|
||||||
|
.project
|
||||||
|
# JDT-specific (Eclipse Java Development Tools)
|
||||||
|
.classpath
|
||||||
|
|
||||||
code/java/天气灾害预警/target/
|
code/java/天气灾害预警/target/
|
||||||
code/java/天气灾害预警/out/
|
code/java/天气灾害预警/out/
|
||||||
*.jar
|
*.jar
|
||||||
*.iws
|
*.iws
|
||||||
*.log
|
*.log
|
||||||
*.lck
|
*.lck
|
||||||
|
129
code/java/.idea/workspace.xml
generated
Normal file
129
code/java/.idea/workspace.xml
generated
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AutoImportSettings">
|
||||||
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
|
</component>
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<list default="true" id="e81b1d7b-ad5e-432e-bbb6-6fbbb75430af" name="Changes" comment="">
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/main/java/AppMain.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/AppMain.java" afterDir="false" />
|
||||||
|
</list>
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="FileTemplateManagerImpl">
|
||||||
|
<option name="RECENT_TEMPLATES">
|
||||||
|
<list>
|
||||||
|
<option value="Class" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="Git.Settings">
|
||||||
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../../.." />
|
||||||
|
</component>
|
||||||
|
<component name="MarkdownSettingsMigration">
|
||||||
|
<option name="stateVersion" value="1" />
|
||||||
|
</component>
|
||||||
|
<component name="MavenImportPreferences">
|
||||||
|
<option name="generalSettings">
|
||||||
|
<MavenGeneralSettings>
|
||||||
|
<option name="useMavenConfig" value="true" />
|
||||||
|
</MavenGeneralSettings>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectId" id="26PXzlujlRW5evopBaaKpyGjycC" />
|
||||||
|
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
|
||||||
|
<ConfirmationsSetting value="1" id="Add" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectViewState">
|
||||||
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
|
<option name="showLibraryContents" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent">
|
||||||
|
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
|
||||||
|
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
||||||
|
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||||
|
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
||||||
|
<property name="node.js.detected.package.eslint" value="true" />
|
||||||
|
<property name="node.js.detected.package.tslint" value="true" />
|
||||||
|
<property name="node.js.selected.package.eslint" value="(autodetect)" />
|
||||||
|
<property name="node.js.selected.package.tslint" value="(autodetect)" />
|
||||||
|
<property name="nodejs_package_manager_path" value="npm" />
|
||||||
|
<property name="project.structure.last.edited" value="Modules" />
|
||||||
|
<property name="project.structure.proportion" value="0.15" />
|
||||||
|
<property name="project.structure.side.proportion" value="0.2" />
|
||||||
|
<property name="settings.editor.selected.configurable" value="preferences.sourceCode.Java" />
|
||||||
|
</component>
|
||||||
|
<component name="RunAnythingCache">
|
||||||
|
<option name="myCommands">
|
||||||
|
<command value="idea:idea -U" />
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="RunManager" selected="Application.AppMain">
|
||||||
|
<configuration name="AppMain" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
|
||||||
|
<option name="MAIN_CLASS_NAME" value="AppMain" />
|
||||||
|
<module name="disaster_warning" />
|
||||||
|
<method v="2">
|
||||||
|
<option name="Make" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
<configuration default="true" type="JetRunConfigurationType">
|
||||||
|
<method v="2">
|
||||||
|
<option name="Make" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
<configuration default="true" type="KotlinStandaloneScriptRunConfigurationType">
|
||||||
|
<option name="filePath" />
|
||||||
|
<method v="2">
|
||||||
|
<option name="Make" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
<recent_temporary>
|
||||||
|
<list>
|
||||||
|
<item itemvalue="Application.AppMain" />
|
||||||
|
</list>
|
||||||
|
</recent_temporary>
|
||||||
|
</component>
|
||||||
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<changelist id="e81b1d7b-ad5e-432e-bbb6-6fbbb75430af" name="Changes" comment="" />
|
||||||
|
<created>1647326463353</created>
|
||||||
|
<option name="number" value="Default" />
|
||||||
|
<option name="presentableId" value="Default" />
|
||||||
|
<updated>1647326463353</updated>
|
||||||
|
<workItem from="1647326471822" duration="6934000" />
|
||||||
|
<workItem from="1647334567225" duration="1649000" />
|
||||||
|
<workItem from="1647338154313" duration="98000" />
|
||||||
|
<workItem from="1647398025447" duration="1714000" />
|
||||||
|
<workItem from="1647399779588" duration="4127000" />
|
||||||
|
<workItem from="1647408946144" duration="1177000" />
|
||||||
|
<workItem from="1647410156413" duration="10520000" />
|
||||||
|
<workItem from="1647479250349" duration="12253000" />
|
||||||
|
<workItem from="1647531836469" duration="259000" />
|
||||||
|
<workItem from="1647566817300" duration="149000" />
|
||||||
|
<workItem from="1647566991986" duration="441000" />
|
||||||
|
<workItem from="1647570380897" duration="2248000" />
|
||||||
|
</task>
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
|
<option name="version" value="3" />
|
||||||
|
</component>
|
||||||
|
<component name="Vcs.Log.Tabs.Properties">
|
||||||
|
<option name="TAB_STATES">
|
||||||
|
<map>
|
||||||
|
<entry key="MAIN">
|
||||||
|
<value>
|
||||||
|
<State />
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
</map>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="XSLT-Support.FileAssociations.UIState">
|
||||||
|
<expand />
|
||||||
|
<select />
|
||||||
|
</component>
|
||||||
|
</project>
|
@@ -3,6 +3,7 @@
|
|||||||
"key": "fe9fa8eeeb6f4301a92541eed565dd15",
|
"key": "fe9fa8eeeb6f4301a92541eed565dd15",
|
||||||
"query_url": "https://devapi.qweather.com/v7/warning/now?",
|
"query_url": "https://devapi.qweather.com/v7/warning/now?",
|
||||||
"wechat_officalaccount_url": "https://cxxmwx.cpic.com.cn/app/index.php?i=2&c=entry&do=send_group_tpl_api&m=ok_tplmessage",
|
"wechat_officalaccount_url": "https://cxxmwx.cpic.com.cn/app/index.php?i=2&c=entry&do=send_group_tpl_api&m=ok_tplmessage",
|
||||||
|
"query_interval": 10,
|
||||||
"cities": [
|
"cities": [
|
||||||
{
|
{
|
||||||
"city_name": "厦门",
|
"city_name": "厦门",
|
||||||
|
@@ -2,12 +2,13 @@
|
|||||||
* @Author: Kane
|
* @Author: Kane
|
||||||
* @Date: 2022-04-22 10:53:49
|
* @Date: 2022-04-22 10:53:49
|
||||||
* @LastEditors: Kane
|
* @LastEditors: Kane
|
||||||
* @LastEditTime: 2022-05-10 16:01:13
|
* @LastEditTime: 2022-05-10 16:28:07
|
||||||
* @FilePath: \DisasterWarning\src\main\java\AppMain.java
|
* @FilePath: \DisasterWarning\src\main\java\AppMain.java
|
||||||
* @Description: 和风天气预警推送厦门太保公众号主程序!
|
* @Description: 和风天气预警推送厦门太保公众号主程序!
|
||||||
*
|
*
|
||||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
*/
|
*/
|
||||||
|
import com.cpic.xim.config.AppConfigManager;
|
||||||
import com.cpic.xim.config.City;
|
import com.cpic.xim.config.City;
|
||||||
import com.cpic.xim.notify.disaster.QWeatherDisasterWarning;
|
import com.cpic.xim.notify.disaster.QWeatherDisasterWarning;
|
||||||
import com.cpic.xim.notify.disaster.WeatherDisasterWarningGrabber;
|
import com.cpic.xim.notify.disaster.WeatherDisasterWarningGrabber;
|
||||||
@@ -48,7 +49,7 @@ public class AppMain
|
|||||||
// 读取配置
|
// 读取配置
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
config = WeatherDisasterNotifyConfig.getConfig();
|
config = AppConfigManager.getConfig();
|
||||||
}
|
}
|
||||||
catch ( IOException error )
|
catch ( IOException error )
|
||||||
{
|
{
|
||||||
@@ -65,59 +66,73 @@ public class AppMain
|
|||||||
String userKey = config.getKey();
|
String userKey = config.getKey();
|
||||||
|
|
||||||
// 遍历所有城市,查询是否有警报,有则推送。
|
// 遍历所有城市,查询是否有警报,有则推送。
|
||||||
for ( City city : cities )
|
while (true)
|
||||||
{
|
{
|
||||||
|
for ( City city : cities )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
json = WeatherDisasterWarningGrabber.getWeatherDisasterWarningJSON( queryURL,
|
||||||
|
userKey, city.getCityCode() );
|
||||||
|
warning = WeatherDisasterWarningGrabber.convertWeatherDisasterWarning( json );
|
||||||
|
|
||||||
|
logger.log( Level.INFO, "查询{0}天气预警,结果:{1}。", new Object[]
|
||||||
|
{ city.getCityName(), json} );
|
||||||
|
|
||||||
|
// 判断是否有警报
|
||||||
|
if ( warning.getWarning().isEmpty() == true)
|
||||||
|
{
|
||||||
|
logger.log( Level.INFO, "查询{0}天气预警,无警报!。", new Object[]
|
||||||
|
{ city.getCityName()} );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.log( Level.INFO, "查询{0}天气预警,发送日志。", new Object[]
|
||||||
|
{ city.getCityName()} );
|
||||||
|
|
||||||
|
sendMessage.sendWeatherDisasterWarning( config.getWechatOfficalAccountURL(),
|
||||||
|
warning );
|
||||||
|
|
||||||
|
logger.log( Level.INFO, "{0}天气预警,日志发送成功。", new Object[]
|
||||||
|
{ city.getCityName()} );
|
||||||
|
|
||||||
|
sendMessage.saveWeatherDisasterWarning( city.getCityName(), warning );
|
||||||
|
}
|
||||||
|
catch ( IOException error )
|
||||||
|
{
|
||||||
|
System.out.println( "查询" + city.getCityName() + "出现异常!" );
|
||||||
|
System.out.println( error.getMessage() );
|
||||||
|
|
||||||
|
logger.log( Level.SEVERE, "查询 {0} 出现异常:{1}。", new Object[]
|
||||||
|
{ city.getCityName(), error.getMessage()} );
|
||||||
|
}
|
||||||
|
catch ( SQLException error )
|
||||||
|
{
|
||||||
|
logger.log( Level.SEVERE, "查询 {0} 写入数据库失败:{1}。", new Object[]
|
||||||
|
{ city.getCityName(), error.getMessage()} );
|
||||||
|
}
|
||||||
|
catch ( ClassNotFoundException error )
|
||||||
|
{
|
||||||
|
logger.log( Level.SEVERE, "查询 {0} 加载oracle驱动失败:{1}。", new Object[]
|
||||||
|
{ city.getCityName(), error.getMessage()} );
|
||||||
|
|
||||||
|
}
|
||||||
|
catch ( Exception error )
|
||||||
|
{
|
||||||
|
logger.log( Level.SEVERE, "查询 {0} 出现未知错误:{1}。", new Object[]
|
||||||
|
{ city.getCityName(), error.getMessage()} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
json = WeatherDisasterWarningGrabber.getWeatherDisasterWarningJSON( queryURL,
|
logger.log( Level.INFO, "查询结束,休眠{0}分钟。", config.getQueryInterval() );
|
||||||
userKey, city.getCityCode() );
|
Thread.sleep( config.getQueryInterval() * 1000 * 60 );
|
||||||
warning = WeatherDisasterWarningGrabber.convertWeatherDisasterWarning( json );
|
|
||||||
|
|
||||||
logger.log( Level.INFO, "查询{0}天气预警,结果:{1}。", new Object[]
|
|
||||||
{ city.getCityName(), json} );
|
|
||||||
|
|
||||||
// 判断是否有警报
|
|
||||||
if ( warning.getWarning().isEmpty() == true)
|
|
||||||
{
|
|
||||||
logger.log( Level.INFO, "查询{0}天气预警,无警报!。", new Object[]
|
|
||||||
{ city.getCityName()} );
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.log( Level.INFO, "查询{0}天气预警,发送日志。", new Object[]
|
|
||||||
{ city.getCityName()} );
|
|
||||||
|
|
||||||
sendMessage.sendWeatherDisasterWarning( config.getWechatOfficalAccountURL(),
|
|
||||||
warning );
|
|
||||||
|
|
||||||
logger.log( Level.INFO, "{0}天气预警,日志发送成功。", new Object[]
|
|
||||||
{ city.getCityName()} );
|
|
||||||
|
|
||||||
sendMessage.saveWeatherDisasterWarning( city.getCityName(), warning );
|
|
||||||
}
|
}
|
||||||
catch ( IOException error )
|
catch ( InterruptedException error )
|
||||||
{
|
{
|
||||||
System.out.println( "查询" + city.getCityName() + "出现异常!" );
|
logger.log( Level.SEVERE, "线程休眠异常,错误信息:{0}", new Object[]
|
||||||
System.out.println( error.getMessage() );
|
{ error.getMessage()} );
|
||||||
|
|
||||||
logger.log( Level.SEVERE, "查询 {0} 出现异常:{1}。", new Object[]
|
|
||||||
{ city.getCityName(), error.getMessage()} );
|
|
||||||
}
|
|
||||||
catch ( SQLException error )
|
|
||||||
{
|
|
||||||
logger.log( Level.SEVERE, "查询 {0} 写入数据库失败:{1}。", new Object[]
|
|
||||||
{ city.getCityName(), error.getMessage()} );
|
|
||||||
}
|
|
||||||
catch ( ClassNotFoundException error )
|
|
||||||
{
|
|
||||||
logger.log( Level.SEVERE, "查询 {0} 加载oracle驱动失败:{1}。", new Object[]
|
|
||||||
{ city.getCityName(), error.getMessage()} );
|
|
||||||
|
|
||||||
}
|
|
||||||
catch ( Exception error )
|
|
||||||
{
|
|
||||||
logger.log( Level.SEVERE, "查询 {0} 出现未知错误:{1}。", new Object[]
|
|
||||||
{ city.getCityName(), error.getMessage()} );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -127,20 +142,6 @@ public class AppMain
|
|||||||
*/
|
*/
|
||||||
private static void setRootLogger() throws IOException
|
private static void setRootLogger() throws IOException
|
||||||
{
|
{
|
||||||
// Logger rootLogger = Logger.getLogger( "com.cpicxim" );
|
|
||||||
// ConsoleHandler consoleHandler = new ConsoleHandler();
|
|
||||||
// FileHandler fileHandler = new FileHandler( LOG_FILE_PATH );
|
|
||||||
// SimpleFormatter formatter = new SimpleFormatter();
|
|
||||||
|
|
||||||
// consoleHandler.setFormatter( formatter );
|
|
||||||
// fileHandler.setFormatter( formatter );
|
|
||||||
|
|
||||||
// rootLogger.addHandler( consoleHandler );
|
|
||||||
// rootLogger.addHandler( fileHandler );
|
|
||||||
|
|
||||||
// rootLogger.setUseParentHandlers( false );
|
|
||||||
// rootLogger.setLevel( Level.ALL );
|
|
||||||
|
|
||||||
LogManager logManager = LogManager.getLogManager();
|
LogManager logManager = LogManager.getLogManager();
|
||||||
// 使用外部的配置文件。
|
// 使用外部的配置文件。
|
||||||
FileInputStream configFile = new FileInputStream( "./logging.properties" );
|
FileInputStream configFile = new FileInputStream( "./logging.properties" );
|
||||||
@@ -150,6 +151,6 @@ public class AppMain
|
|||||||
|
|
||||||
logManager.readConfiguration( configFile );
|
logManager.readConfiguration( configFile );
|
||||||
|
|
||||||
Logger rootLogger = Logger.getLogger( "com.cpicxim" );
|
Logger.getLogger( "com.cpicxim" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2022-05-10 16:06:14
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @LastEditTime: 2022-05-10 16:09:07
|
||||||
|
* @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\AppConfigManager.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.cpic.xim.config;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
|
||||||
|
|
||||||
|
public class AppConfigManager
|
||||||
|
{
|
||||||
|
private static final int BUFFER_SIZE = 1024;
|
||||||
|
private static final String CONFIG_FILE_CHARSET = "UTF-8";
|
||||||
|
private static final String CONFIG_FILE_PATH = "./config.json";
|
||||||
|
private static WeatherDisasterNotifyConfig appConfig = null;
|
||||||
|
|
||||||
|
public static WeatherDisasterNotifyConfig getConfig() throws IOException
|
||||||
|
|
||||||
|
{
|
||||||
|
if ( appConfig != null)
|
||||||
|
{
|
||||||
|
return appConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
FileInputStream configFile = null;
|
||||||
|
InputStreamReader in = null;
|
||||||
|
StringBuffer json = null;
|
||||||
|
char[] buffer = new char[BUFFER_SIZE];
|
||||||
|
|
||||||
|
// 设置json属性
|
||||||
|
mapper.setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
configFile = new FileInputStream( CONFIG_FILE_PATH );
|
||||||
|
in = new InputStreamReader( configFile, CONFIG_FILE_CHARSET );
|
||||||
|
json = new StringBuffer();
|
||||||
|
|
||||||
|
int length = in.read( buffer );
|
||||||
|
|
||||||
|
while (length != -1)
|
||||||
|
{
|
||||||
|
json.append( buffer );
|
||||||
|
|
||||||
|
length = in.read( buffer );
|
||||||
|
}
|
||||||
|
|
||||||
|
appConfig = mapper.readValue( json.toString(), WeatherDisasterNotifyConfig.class );
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if ( configFile != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
configFile.close();
|
||||||
|
}
|
||||||
|
catch ( IOException e )
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return appConfig;
|
||||||
|
}
|
||||||
|
}
|
@@ -1,72 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* @Author: Kane
|
||||||
|
* @Date: 2022-04-24 10:21:46
|
||||||
|
* @LastEditors: Kane
|
||||||
|
* @LastEditTime: 2022-05-10 16:16:28
|
||||||
|
* @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\WeatherDisasterNotifyConfig.java
|
||||||
|
* @Description:
|
||||||
|
*
|
||||||
|
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||||
|
*/
|
||||||
package com.cpic.xim.config;
|
package com.cpic.xim.config;
|
||||||
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
|
|
||||||
|
|
||||||
public class WeatherDisasterNotifyConfig
|
public class WeatherDisasterNotifyConfig
|
||||||
{
|
{
|
||||||
private static final int BUFFER_SIZE = 1024;
|
|
||||||
private static final String CONFIG_FILE_CHARSET = "UTF-8";
|
|
||||||
private static final String CONFIG_FILE_PATH = "./config.json";
|
|
||||||
private static WeatherDisasterNotifyConfig appConfig = null;
|
|
||||||
|
|
||||||
public static WeatherDisasterNotifyConfig getConfig() throws IOException
|
|
||||||
|
|
||||||
{
|
|
||||||
if ( appConfig != null)
|
|
||||||
{
|
|
||||||
return appConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
FileInputStream configFile = null;
|
|
||||||
InputStreamReader in = null;
|
|
||||||
StringBuffer json = null;
|
|
||||||
char[] buffer = new char[BUFFER_SIZE];
|
|
||||||
|
|
||||||
// 设置json属性
|
|
||||||
mapper.setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE );
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
configFile = new FileInputStream( CONFIG_FILE_PATH );
|
|
||||||
in = new InputStreamReader( configFile, CONFIG_FILE_CHARSET );
|
|
||||||
json = new StringBuffer();
|
|
||||||
|
|
||||||
int length = in.read( buffer );
|
|
||||||
|
|
||||||
while (length != -1)
|
|
||||||
{
|
|
||||||
json.append( buffer );
|
|
||||||
|
|
||||||
length = in.read( buffer );
|
|
||||||
}
|
|
||||||
|
|
||||||
appConfig = mapper.readValue( json.toString(), WeatherDisasterNotifyConfig.class );
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if ( configFile != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
configFile.close();
|
|
||||||
}
|
|
||||||
catch ( IOException e )
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return appConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
public WeatherDisasterNotifyConfig()
|
public WeatherDisasterNotifyConfig()
|
||||||
{};
|
{};
|
||||||
@@ -106,6 +56,18 @@ public class WeatherDisasterNotifyConfig
|
|||||||
return cities;
|
return cities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getQueryInterval()
|
||||||
|
{
|
||||||
|
return queryInterval;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setQueryInterval( int queryInterval )
|
||||||
|
{
|
||||||
|
this.queryInterval = queryInterval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setCities( Vector<City> cities )
|
public void setCities( Vector<City> cities )
|
||||||
{
|
{
|
||||||
this.cities = cities;
|
this.cities = cities;
|
||||||
@@ -131,12 +93,24 @@ public class WeatherDisasterNotifyConfig
|
|||||||
this.wechatOfficalAccountURL = wechatOfficalAccountURL;
|
this.wechatOfficalAccountURL = wechatOfficalAccountURL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@JsonProperty( "title")
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
|
@JsonProperty( "key")
|
||||||
private String key;
|
private String key;
|
||||||
|
|
||||||
|
@JsonProperty( "query_url")
|
||||||
private String queryUrl;
|
private String queryUrl;
|
||||||
|
|
||||||
|
@JsonProperty( "query_interval")
|
||||||
|
private int queryInterval;
|
||||||
|
|
||||||
@JsonProperty( "wechat_officalaccount_url")
|
@JsonProperty( "wechat_officalaccount_url")
|
||||||
private String wechatOfficalAccountURL;
|
private String wechatOfficalAccountURL;
|
||||||
|
|
||||||
|
@JsonProperty( "cities")
|
||||||
private Vector<City> cities;
|
private Vector<City> cities;
|
||||||
|
|
||||||
|
@JsonProperty( "notify_stuffs")
|
||||||
private Vector<CpicxmStuff> notifyStuffs;
|
private Vector<CpicxmStuff> notifyStuffs;
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,2 @@
|
|||||||
|
AppMain.class
|
||||||
|
com\cpic\xim\disaster_warning\WeatherDisasterWarningGrabber.class
|
@@ -0,0 +1,2 @@
|
|||||||
|
D:\develop\产险厦门分公司项目\天气灾害预警\code\java\天气灾害预警\src\main\java\AppMain.java
|
||||||
|
D:\develop\产险厦门分公司项目\天气灾害预警\code\java\天气灾害预警\src\main\java\com\cpic\xim\disaster_warning\WeatherDisasterWarningGrabber.java
|
19
应用/1.0/config.json
Normal file
19
应用/1.0/config.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"title": "天气灾害预警配置文件",
|
||||||
|
"key": "fe9fa8eeeb6f4301a92541eed565dd15",
|
||||||
|
"query_url": "https://devapi.qweather.com/v7/warning/now?",
|
||||||
|
"wechat_officalaccount_url": "https://cxxmwx.cpic.com.cn/app/index.php?i=2&c=entry&do=send_group_tpl_api&m=ok_tplmessage",
|
||||||
|
"query_interval": 10,
|
||||||
|
"cities": [
|
||||||
|
{
|
||||||
|
"city_name": "厦门",
|
||||||
|
"city_code": "101230201"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"notify_stuffs": [
|
||||||
|
{
|
||||||
|
"stuff_name": "王炜",
|
||||||
|
"mobile_phone": "15959215339"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
14
应用/1.0/db.json
Normal file
14
应用/1.0/db.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"tns_name": "xmcx1",
|
||||||
|
"ip_addr": "10.39.0.86",
|
||||||
|
"jdbc_url": "jdbc:oracle:thin:@10.39.0.86:1521:xmcx1",
|
||||||
|
"table_space": "wechat",
|
||||||
|
"user_name": "wechat",
|
||||||
|
"password": "@rn7Q+t5zeyKIZ~s",
|
||||||
|
"tables": [
|
||||||
|
{
|
||||||
|
"table_name": "weather_disaster_notify",
|
||||||
|
"table_description": "天气预警消息表"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
10
应用/1.0/logging.properties
Normal file
10
应用/1.0/logging.properties
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler
|
||||||
|
|
||||||
|
.level = INFO
|
||||||
|
|
||||||
|
java.util.logging.FileHandler.pattern = ./logs/log_%u.log
|
||||||
|
java.util.logging.FileHandler.limit = 50000
|
||||||
|
java.util.logging.FileHandler.count = 1
|
||||||
|
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
|
||||||
|
java.util.logging.FileHandler.append = true;
|
Reference in New Issue
Block a user