Java 如何只加载一次属性文件?
我正在通过从属性文件获取数据来读取电子邮件。我正在使用计时器计划在一段时间后以固定间隔读取新邮件。我如何才能做到这一点 TimerSchedule.javaJava 如何只加载一次属性文件?,java,Java,我正在通过从属性文件获取数据来读取电子邮件。我正在使用计时器计划在一段时间后以固定间隔读取新邮件。我如何才能做到这一点 TimerSchedule.java public class TimeScheduler { public static void main(String[] args) { Timer timer = new Timer(); GmailConfiguration gmailConfiguration = new GmailC
public class TimeScheduler
{
public static void main(String[] args)
{
Timer timer = new Timer();
GmailConfiguration gmailConfiguration = new GmailConfiguration();
TimerTask timerTask = new TimerTask()
{
@Override
public void run()
{
gmailConfiguration.configure();
}
};
timer.scheduleAtFixedRate(timerTask, 500, 30000);
}
}
我正在从GmailConfiguration.java中的属性文件获取数据
public class GmailConfiguration
{
private static final Logger LOGGER = LoggerFactory.getLogger(GmailConfiguration.class);
public void configure()
{
JSONParser parser = new JSONParser();
try
{
String propertyFileName = "emailServer.properties";
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(propertyFileName);
JSONObject jsonObject = (JSONObject) parser.parse(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
JSONArray jadata = (JSONArray) jsonObject.get("Servers");
int len = jadata.size();
AccessMailMessages readGmail = new AccessMailMessages();
JSONObject server;
String name;
String host;
String username;
String password;
int port;
String folderName;
for (int i = 0; i < len; i++)
{
server = (JSONObject) jadata.get(i);
name = (String) server.get("Name");
host = (String) server.get("Host");
username = (String) server.get("UserName");
password = (String) server.get("Password");
port = ((Long) server.get("Port")).intValue();
folderName = (String) server.get("FolderName");
readGmail.recieveGmail(name, host, port, username, password, folderName);
}
}
catch (Exception e)
{
LOGGER.error("Exception", e);
}
}
}
这是我的GmailConfiguration.java
public class GmailConfiguration
{
private static final Logger LOGGER = LoggerFactory.getLogger(GmailConfiguration.class);
public void configure()
{
JSONParser parser = new JSONParser();
try
{
String propertyFileName = "emailServer.properties";
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(propertyFileName);
JSONObject jsonObject = (JSONObject) parser.parse(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
JSONArray jadata = (JSONArray) jsonObject.get("Servers");
int len = jadata.size();
AccessMailMessages readGmail = new AccessMailMessages();
JSONObject server;
String name;
String host;
String username;
String password;
int port;
String folderName;
for (int i = 0; i < len; i++)
{
server = (JSONObject) jadata.get(i);
name = (String) server.get("Name");
host = (String) server.get("Host");
username = (String) server.get("UserName");
password = (String) server.get("Password");
port = ((Long) server.get("Port")).intValue();
folderName = (String) server.get("FolderName");
readGmail.recieveGmail(name, host, port, username, password, folderName);
}
}
catch (Exception e)
{
LOGGER.error("Exception", e);
}
}
}
公共类Gmail配置
{
私有静态最终记录器Logger=LoggerFactory.getLogger(GmailConfiguration.class);
public void configure()
{
JSONParser=新的JSONParser();
尝试
{
String propertyFileName=“emailServer.properties”;
InputStream InputStream=getClass().getClassLoader().getResourceAsStream(propertyFileName);
JSONObject JSONObject=(JSONObject)parser.parse(新的InputStreamReader(inputStream,StandardCharsets.UTF_8));
JSONArray jadata=(JSONArray)jsonObject.get(“服务器”);
int len=jadata.size();
AccessMailMessages readGmail=新建AccessMailMessages();
JSONObject服务器;
字符串名;
字符串主机;
字符串用户名;
字符串密码;
国际港口;
字符串folderName;
对于(int i=0;i
将配置
类与电子邮件接收器
类分开:
//使用“单例”模式
类Gmail配置{
私有静态最终Gmail配置实例=新Gmail配置();
布尔配置;
字符串主机;
字符串端口;
//等等。
public void configure(){
如果(!已配置){
//读取属性,填充主机/端口等。
isConfigured=true;
}
//第二次调用时,不会进行读取
}
}
然后,关于接收电子邮件:
class-GmailReceiver{
公共接收(){
AccessMailMessages readGmail=新建AccessMailMessages();
GmailConfiguration config=GmailConfiguration.INSTANCE;
config.configure();
readGmail.ReceiveGmail(config.getName(),
config.getHost(),
config.getPort()/*etc*/);
}
}
并确保只安排
GmailReceiver
将配置
类与电子邮件接收器
类分开:
//使用“单例”模式
类Gmail配置{
私有静态最终Gmail配置实例=新Gmail配置();
布尔配置;
字符串主机;
字符串端口;
//等等。
public void configure(){
如果(!已配置){
//读取属性,填充主机/端口等。
isConfigured=true;
}
//第二次调用时,不会进行读取
}
}
然后,关于接收电子邮件:
class-GmailReceiver{
公共接收(){
AccessMailMessages readGmail=新建AccessMailMessages();
GmailConfiguration config=GmailConfiguration.INSTANCE;
config.configure();
readGmail.ReceiveGmail(config.getName(),
config.getHost(),
config.getPort()/*etc*/);
}
}
确保只安排
GmailReceiver
我不知道你在问什么。你想做一些“只做一次”的事情,然后谈论一个按计划执行的计时器任务。对不起,伙计,但我想问一下,程序什么时候第一次执行,然后只从属性文件加载数据,然后重用相同加载的数据。程序的运行方式是在固定的间隔时间后一次又一次地执行。我不知道你在问什么。你想做一些“只做一次”的事情,然后谈论一个按计划执行的计时器任务。对不起,伙计,但我想问一下,程序什么时候第一次执行,然后只从属性文件加载数据,然后重用相同加载的数据。程序的运行方式是在固定的间隔时间后一次又一次地执行。