在JAVA中设置当前上下文环境变量的问题
关于在JAVA中设置当前线程上下文环境变量的问题由于在solaris/unix环境下开发 需要经常用到crontab自动调用进程
但是crontab调用中 默认的环境变量非常的少 特别是LC_ALL 没有设置,导致Console输出中文时会出现乱码
使用log4j 等控件 也会默认取LC_ALL 为C 而出现大量乱码
JAVA 只设置了 System.getenv() 获取环境变量, 却没有办法修改当前环境变量 只能:
(1) crontab 中增加LC_ALL=zh_CH.GBK 例如
18 00 11 11 * LC_ALL=zh_CH.GBK java -jar bin3.zip >/test1.log
(2) 使用sh 在sh文件里面增加 LC_ALL=zh_CH.GBK 例如
dts2.sh
LC_ALL=zh_CH.GBK java -jar bin3.zip
(3) 在JAVA 程序头部,添加小块代码 判断当前环境变量是否包含 LC_ALL=zh_CH.GBK
如果不包含 则用process(cmd,env) 将当前环境变量 增加 LC_ALL=zh_CH.GBK 直接再重新启动
本程序, 同事本程序自己退出
以上三条方法都非常饶 所以想请问一下:
怎样在JAVA中设置当前上下文环境变量 例如 LC_ALL=zh_CH.GBK --------------------编程问答-------------------- 用ThreadLocal,详细的查看API,下面是API中的介绍:
java.lang
类 ThreadLocal<T>
该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。 --------------------编程问答-------------------- 局部变量 只是用来存点临时信息的吧? 跟环境变量 关系只是变量两个字相同 --------------------编程问答-------------------- 哦。我看错了,环境变量用它System.getenv(),要修改估计没有这样的接口吧,你看能不能操作文件 --------------------编程问答-------------------- System.getenv()取回的是个map对象。你往里面put就行了啊。在一开始就put进去
补充:Java , Java SE