Java
跨域等问题
package com.liby.bpm.spm.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.liby.bpm.spm.intercept.ExcleFilterIntercept;
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
//注入已经写好的拦截器类
@Autowired
private ExcleFilterIntercept excleFilterIntercept;
//@Autowired
//private RunRegisterIntercept runRegisterIntercept;
//跨域问题处理
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")// 放行哪些原始域
.allowCredentials(true)// 是否发送Cookie信息
.allowedMethods("GET","POST", "PUT", "DELETE")// 放行哪些原始域(请求方式)
.allowedHeaders("*")// 放行哪些原始域(头部信息)
.exposedHeaders("Access-Control-Allow-Origin")// 暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
.allowCredentials(false).maxAge(3600);
}
// 这个方法是用来配置静态资源的,比如html,js,css,等等
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
// 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注册第两个个拦截器,excludePathPatterns是取消拦截的路径
registry.addInterceptor(excleFilterIntercept).addPathPatterns("/**/index")
.excludePathPatterns("/index.html","/static/**");
}
}
嵌套关闭资源
**参考:**https://blog.csdn.net/java8cn/article/details/22761855?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs
**解释:**在try( …)里声明的资源,会在try-catch代码块结束后自动关闭掉
例:
try(OutputStream out = new FileOutputStream(filepath);) {
global_out = out;
out.write((filepath+"inside try catch block").getBytes());
} catch (Exception e) {
e.printStackTrace();
}
Mybatis
spring nvarchar 和 char
**作用:**传入的数据为null。NVARCHAR 不会对 null 进行处理,CHAR 反之
例:
select
#{i.id,jdbcType=CHAR}, #{i.orgid,jdbcType=NVARCHAR}, #{i.bindid,jdbcType=CHAR},
#{i.createdate,jdbcType=TIMESTAMP}, #{i.createuser,jdbcType=NVARCHAR}, #{i.updatedate,jdbcType=TIMESTAMP},
#{i.updateuser,jdbcType=NVARCHAR}, #{i.processdefid,jdbcType=CHAR}, #{i.isend,jdbcType=NUMERIC},
#{i.item,jdbcType=NVARCHAR},
#{i.warehouse,jdbcType=NVARCHAR}, #{i.plant,jdbcType=NVARCHAR}, #{i.code80Replace,jdbcType=NVARCHAR},
#{i.maxProdQty,jdbcType=NVARCHAR}, #{i.prodPriority,jdbcType=NVARCHAR}, #{i.remark,jdbcType=NVARCHAR}
from dual
<![CDATA[ sql ]]>
**作用:**自动转义 > <
例:
<![CDATA[
INSERT INTO ${tableNames.mainTable}(ID,BINDID,ITEM,CHANNEL,WAREHOUSE_DESC,SUB_CHANNEL)
SELECT GET_UUID(), #{bindid,jdbcType=CHAR}, ITEM, CHANNEL, WAREHOUSE_DESC, SUB_CHANNEL FROM
(
SELECT ITEM,CHANNEL,WAREHOUSE_DESC,SUB_CHANNEL FROM BO_ACT_DPM_FCSTSUM_BACKUP
WHERE VERSIONID <= (SELECT CREATEDATE FROM BO_EU_SPM_SUPPLAN_PROCESS WHERE BINDID = #{bindid,jdbcType=CHAR})
AND CAMPAIGN IN (SELECT * FROM TABLE(F_CAL_CAMPAIGN(#{yearMonth,jdbcType=CHAR}, #{months,jdbcType=CHAR})))
AND (CLASS_DESC, SUB_CHANNEL) IN (SELECT CU.CLASS_DESC, CU.SUB_CHANNEL
FROM BO_EU_SPM_SUPPLAN_PROCESS PRO
LEFT JOIN BO_EU_SPM_CLASS_CHANNEL_USER CU
ON PRO.CREATEUSER = CU.USERID AND PRO.CLASS_DESC = CU.CLASS_DESC
WHERE CU.CHANNEL = #{tableNames.channel,jdbcType=CHAR})
UNION
SELECT ITEM,CHANNEL,WAREHOUSE_DESC,SUB_CHANNEL FROM BO_EU_SPM_FCSTASS_BACKUP
WHERE VERSIONID <= (SELECT CREATEDATE FROM BO_EU_SPM_SUPPLAN_PROCESS WHERE BINDID = #{bindid,jdbcType=CHAR})
AND CAMPAIGN IN (SELECT * FROM TABLE(F_CAL_CAMPAIGN(#{yearMonth,jdbcType=CHAR}, #{months,jdbcType=CHAR})))
AND (CLASS_DESC, SUB_CHANNEL) IN (SELECT CU.CLASS_DESC, CU.SUB_CHANNEL
FROM BO_EU_SPM_SUPPLAN_PROCESS PRO
LEFT JOIN BO_EU_SPM_CLASS_CHANNEL_USER CU
ON PRO.CREATEUSER = CU.USERID AND PRO.CLASS_DESC = CU.CLASS_DESC
WHERE CU.CHANNEL = #{tableNames.channel,jdbcType=CHAR})
)
]]>
Oracle
不要使用LONG,使用CLOB
参考:官网:https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT513
LONG和CLOB的差别:https://www.geeksforgeeks.org/difference-between-longs-vs-lobs/[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IWRQUvGJ-1626258218840)(D:\学习资料\学习笔记\image\工作技术文档\image-20210622170821430.png)]
无法在源表获得一组稳定的行
解决方案:在on的条件中加上ID判断
例子:
MERGE INTO ${tableNames.detTable} DET USING(
SELECT CAL.GT_FCSTADVICE_QTY, CAL.MATKLE,CAL.ZONE,CAL.CAMPAIGN,CAL.WAREHOUSE,DET.ID FROM
(SELECT ID,ITEM,SUB_CHANNEL,CAMPAIGN,WAREHOUSE_DESC FROM ${tableNames.detTable} WHERE BINDID = #{bindid,jdbcType=CHAR}) DET
LEFT JOIN BO_EU_SPM_79ADJUSTSALE_GT_CAL CAL
ON DET.ITEM = CAL.MATKLE AND DET.SUB_CHANNEL = CAL.ZONE AND DET.CAMPAIGN = CAL.CAMPAIGN AND DET.WAREHOUSE_DESC = CAL.WAREHOUSE
) TEMP
ON (DET.ITEM = TEMP.MATKLE AND DET.SUB_CHANNEL = TEMP.ZONE AND DET.CAMPAIGN = TEMP.CAMPAIGN AND DET.WAREHOUSE_DESC = TEMP.WAREHOUSE AND DET.ID = TEMP.ID)
-- 加上了ID的判断
WHEN MATCHED THEN
UPDATE SET DET.ASGN_FCSTADVICE_QTY = NVL(TEMP.GT_FCSTADVICE_QTY,0)
WHERE BINDID = #{bindid,jdbcType=CHAR}
保存小数点前无‘0’的问题
**参考:**https://www.cnblogs.com/zcy_soft/archive/2012/01/06/2314102.html
例子:
-- 实际开发中的使用
select rtrim(to_char(ROUND(1/2,5), 'FM90D9999'), to_char(0, 'D')) from dual;
条件判断合集
例:select 1 from dual where field > 0
例:^((?:19|20)\d\d)(0[1-9]|1[012])$
例:
UPDATE BO_EU_SPM_CLASS_CHAN_USER_OPS SET VERIFY_RESULT = CONCAT(VERIFY_RESULT,'品类编码不存在;')
WHERE NOT EXISTS(SELECT DEF2 FROM BO_ACT_DPM_HANA_CPBMSJ_FULL WHERE DEF2 = CLASS_CODE);
例:``
取两值中最大的
方法一:
**作用:**比较两个值,获取最大的那个
语法:DECODE(SIGN(A - B), 1, A, B)
例:
SELECT DECODE(SIGN(NULL-11),1,'10','11') AS TEMP FROM DUAL;
方法二:
**作用:**比较()内的数据并取最大值
例子:
select GREATEST(1,232,2.3,2-4,3*3,0) from dual;
-- 结果为232
加减乘除问题
**作用:**数值运算
注意:数字 * NULL = NULL
,数值 与 NULL 值进行任何数学运算,结果都为**NULL**
例:
SELECT
CASE
WHEN MAIN.SKU_FOR_SPECIAL_SUP = '否' THEN ROUND(D.FSCTWHOLEMONTH_UTD_QTY, 5)
WHEN MAIN.SKU_FOR_SPECIAL_SUP = '是' THEN
ROUND(NVL(D.FSCTNONMONTH_UTD_QTY, 0), 5) +
(ROUND(NVL(MAIN.SALES_QUARTER_AVG, 0), 5) * 0.5) +
(ROUND(NVL(D.FSCTWHOLEMONTH_UTD_QTY, 0), 5) * 0.5)
END AS ASGN_FCSTADVICE_QTY,D.ID
FROM dual;
ROUND
**作用:**Round函数返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。除数值外,也可对日期进行舍入运算。
语法:ROUND(number,num_digits)
例:
Round(数值,保留的小数位数)
Number:需要进行四舍五入的数字。
Num_digits:指定的位数,按此位数进行四舍五入。
其中,如果 num_digits 大于 0,则四舍五入到指定的小数位。
如果 num_digits 等于 0,则四舍五入到最接近的整数。
如果 num_digits 小于 0,则在小数点左侧进行四舍五入。
=ROUND(2.649, 1) 将 2.649 四舍五入到一个小数位 (2.6)
=ROUND(-5.574, 2) 将 -5.574 四舍五入到两小数位 (-5.57)
Clob
**作用:**存储数据库中的大型单字节字符数据块,不支持宽度不等的字符集
**语法:**sql : (bigData).getClobVal()
参考:Oracle clob怎么存储超过4000长度的数据,你了解吗_蓝关故人-CSDN博客
例:
select
(VERSIONID_CAMPAIGN_TYPE_XML).getClobVal() --换一种Clob格式
from
dual;
IN
注意: COLUMN NOT IN ('',COLUMN) 相当于 COLUMN != '' & COLUMN != COLUMN
,如果()
中包含NULL
或''
,那么返回来的集合是空集。因为 column != ''
永远为 false
。解决方案:使用 exists()
例:
-- 错误
select 1 from dual where 333 NOT IN (SELECT MATKLE FROM BO_ACT_DPM_QD_XL_CPBMSJ);
-- 正确
select 1 from dual where NOT EXISTS (SELECT MATKLE FROM BO_ACT_DPM_QD_XL_CPBMSJ WHERE MATKLE = '333');
MERGE INTO
语法:
oracle Merge Into 用法 - 简书 (jianshu.com)
oracle:https://oracle-base.com/articles/9i/merge-statement
例子:
MERGE INTO catalog1 s1 USING catalog2 s2 ON (s1.id = s2.id)
WHEN MATCHED THEN UPDATE SET s1.price = s2.price
WHEN NOT MATCHED THEN INSERT (id, item, price) values (s2.id, s2.item, s2.price)
时间格式化
语法:
TO_CHAR(CREATEDATE, 'YYYY-MM-DD HH24:MI:SS') AS CREATEDATE
时间问题
当月第一天:
TRUNC(TO_DATE('2021-07-01','YYYY-MM-DD'),'MONTH')
当月最后一天:
2021-07-31 00:00:00:TRUNC((last_day(sysdate)))
或TRUNC(ADD_MONTHS(TO_DATE('202106', 'YYYYMM'),1),'MONTH') - 1/86400)
某一天的最后一秒:
2021-07-31 23:59:59:(TO_DATE('2021-07-31', 'YYYY-MM-DD')+1 - 1/86400)
行转列
语法:PIVOT (?)
例:
例子:
SELECT *
FROM (
SELECT M.EPLATFORM,
M.WAREHOUSE,
M.CAMPAIGN,
M.MONTHDMDREQ,
M.NATURALWEEK1,
M.NATURALWEEK2,
M.NATURALWEEK3,
M.NATURALWEEK4,
M.NATURALWEEK5,
M.NATURALWEEK6,
M.MATNR,
N.MONTHDMDREQ LASTMONTHDMDREQ
FROM BO_EU_DPM_EC_EPDEMANDDET M
LEFT JOIN BO_EU_DPM_EC_EPDEMANDLATEST N
ON M.EPLATFORM = N.EPLATFORM AND M.CAMPAIGN = N.CAMPAIGN AND M.WAREHOUSE = N.WAREHOUSE AND
M.MATNR = N.MATNR
WHERE M.BINDID = 'fe1bdb43-90ce-41bf-a1d6-9a5c2c3f9a88') PIVOT ( MAX(MONTHDMDREQ) MONTHDMDREQ,
MAX(LASTMONTHDMDREQ) LASTMONTHDMDREQ,MAX(NATURALWEEK1) NATURALWEEK1,MAX(NATURALWEEK2) NATURALWEEK2,
MAX(NATURALWEEK3) NATURALWEEK3,MAX(NATURALWEEK4) NATURALWEEK4,MAX(NATURALWEEK5) NATURALWEEK5,
MAX(NATURALWEEK6) NATURALWEEK6 FOR CAMPAIGN IN (202104))
转换
语法:N'' -> SELECT N'' test from daul
例:
SELECT N'' AS MATNR, 0.0 AS MATNR FROM BO_EU_DPM_EC_EPSUMADJUST WHERE BINDID = 'cfb619d5-88fa-4cf8-a423-a33b76629019' AND CAMPAIGN = '202104';
replace
语法:replace(字符串,'要替换的字符','替换后的字符')
例:
SELECT replace('1-2-3','-','') MONTH FROM dual;
concat
语法:concat(字符串1, 字符串2)
例:
SELECT CONCAT('字符串1', '字符串2') FROM dual;
-- 结果:
-- 字符串1字符串2
instr
**语法:**instr(需要判断的字段, 关键字)
例:
-- instr(字段,’关键字’)>0相当于 字段 like ‘%关键字%’
-- instr(字段,’关键字’)=1相当于 字段 like ‘关键字%’
-- instr(字段,’关键字’)=0相当于 字段 not like ‘%关键字%’
SELECT * FROM A WHERE instr(STATUS,'这是个空字段')=0
-- 特殊用法
select id,name from user where instr(‘901678,901669’, id) > 0;
-- 它等价于
select id,name from user where id = 901678 or id = 901669;
decode
语法:decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
例:
decode(X,A,B,C,D,E)
这个函数运行的结果是,当X = A,函数返回B;当X != A 且 X = C,函数返回D;当X != A 且 X != C,函数返回E。 其中,X、A、B、C、D、E都可以是表达式。
exists
**语法:**exists(子查询)
例:
表示()内子查询语句返回结果不为空说明where条件成立就会执行主sql语句,如果为空就表示where条件不成立,sql语句就不会执行。
not exists和exists相反,子查询语句结果为空,则表示where条件成立,执行sql语句。负责不执行。
nvl
语法:NVL(E1, E2)
解释:如果E1为NULL,则函数返回E2,否则返回E1本身
nvl2
语法:NVL(E1, E2, E3)
解释:如果E1为NULL,则函数返回E3,若E1不为null,则返回E2
Sec-?-?:Header
https://www.cnblogs.com/fulu/p/13879080.html
DB link
语法:
create database link 自定义要连接的数据库名字
connect to username identified by password
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip/域名)(PORT = 端口号))
)
(CONNECT_DATA =
(SERVICE_NAME = bpmdvp)
)
)';
查询当前数据库已创建哪些连接:
select * from dba_db_links
参考网站:
https://www.cnblogs.com/Marydon20170307/p/8831134.html
MINUS
**语法:**表1 minus 表2
**解释:**取两表的差集。表1 - 表2 = 差集
创建函数/自定义返回类型
语法:
CREATE OR REPLACE TYPE "BPMQA"."T_CAMPAIGN" AS OBJECT(CAMPAIGN VARCHAR2(10)); -- 创建类型CREATE OR REPLACE TYPE "BPMQA"."T_CAMPAIGN_TABLE" AS TABLE OF T_CAMPAIGN; -- 根据类型创建收集类型-- 以上一定要按顺序下来
解释:在copy一个函数的过程中,出现了PLS-00201: 必须声明标识符 ‘XXX’,具体的提示是说函数返回类型没有定义,然后按照上面的代码创建类型和收集类型,然后保存,在查询中使用一次函数来检测是否能正常运行即可。
listagg 列转行
语法:
listagg(列名, '连接符') within group(order by 列名)
例子:
SELECT listagg(EXTTEXT2, '/') WITHIN GROUP ( ORDER BY DICTKEY) FROM BO_ACT_DICT_KV_ITEM WHERE DICTKEY = 'DPM.EC.SALES.EP';
**解释:**先在BO_ACT_DICT_KV_ITEM
中根据WHERE
条件获取到结果集,然后在这个结果集的基础上进行分组WITHIN GROUP
,随后获取分组后的结果集中的EXTTEXT2
字段,并在每一个的EXTTEXT2
字段后拼接/
。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4gEgBNpi-1626258218850)(D:\学习资料\学习笔记\image\工作技术文档\image-20210322143324834.png)]
UNION & UNION ALL
作用:
UNION:对多个结果集进行并集操作并且去除重复结果,同时进行默认规则的排序
UNION ALL:仅仅对多个结果集进行并集操作,不去除重复记录,不进行排序按照关联的次序显示数据
其他操作:
INTERSECT:对多个结果集进行交集操作并且去除重复结果,同时进行默认规则的排序
MINUS:对两个结果集进行差操作并且去除重复结果,同时进行默认规则的排序
游标
https://blog.csdn.net/mmake1994/article/details/86373918
Mysql
limit
**坑:**排序+分⻚
可能出现重复数据。因为重复数据行有二义性。
解决方案:
-- 排序中存在相同的值时,需要再指定⼀个排序规则,通过这种排序规则不存在⼆义性。-- 可以在后⾯追加⼀个主键排序
spring
事务手动回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务手动回滚
限制上传文件大小
spring.servlet.multipart.maxFileSize=xxMB #设置单个文件大小
spring.servlet.multipart.maxRequestSize=xxMB #设置单次请求的总大小
用处:和 server.tomcat.max-http-post-size 这个一起用解决下面的问题[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iYcRtWL1-1626258218853)(D:\学习资料\学习笔记\image\工作技术文档\image-20210114103949005.png)]
HTTP POST内容大小
server.tomcat.max-http-post-size=2MB # Maximum size of the HTTP post content.设置HTTP post内容的最大大小
请求体大小
server.tomcat.max-swallow-size=2MB #Maximum amount of request body to swallow. 请求体吞吐量的总计大小
Git
预览删除文件
命令:git rm -r -n --cached 删除的文件路径
**作用:**预览将要删除的文件,-n
不会执行删除操作
例:
git rm -r -n --cached src/main/webapp/WEB-INF/workfiles/*
结果:
rm 'src/main/webapp/WEB-INF/workfiles/10/2/6c92a225c3c2448aad3f143e2bb2132c.png'
rm 'src/main/webapp/WEB-INF/workfiles/10/2/9782d8c2b78342308a46bfa6d6f0ccde.png'
rm 'src/main/webapp/WEB-INF/workfiles/5/11/0b1f2fa39b4c4484a81609865d89e7e4.doc'
rm 'src/main/webapp/WEB-INF/workfiles/5/11/11f592bcc56b4307be5a414c6c599a8b.docx'
rm 'src/main/webapp/WEB-INF/workfiles/5/11/13b46a740e3a49149eb58f212f688b7b.docx'
rm 'src/main/webapp/WEB-INF/workfiles/5/11/22a547a1fb144b81997dbe9e5835ba3b.docx'
删除文件
命令:git rm -r --cached 删除的文件路径
作用:删除文件。将文件/文件夹及其内容在git仓库(本地)中删除,并取消追踪
例:
git rm -r --cached src/main/webapp/WEB-INF/workfiles/*
结果:
rm 'src/main/webapp/WEB-INF/workfiles/10/2/6c92a225c3c2448aad3f143e2bb2132c.png'
rm 'src/main/webapp/WEB-INF/workfiles/10/2/9782d8c2b78342308a46bfa6d6f0ccde.png'
rm 'src/main/webapp/WEB-INF/workfiles/5/11/0b1f2fa39b4c4484a81609865d89e7e4.doc'
rm 'src/main/webapp/WEB-INF/workfiles/5/11/11f592bcc56b4307be5a414c6c599a8b.docx'
rm 'src/main/webapp/WEB-INF/workfiles/5/11/13b46a740e3a49149eb58f212f688b7b.docx'
rm 'src/main/webapp/WEB-INF/workfiles/5/11/22a547a1fb144b81997dbe9e5835ba3b.docx'
删除远程分支
命令:git push <远程仓库名> --delete <要删除的远程分支名称>
作用:删除远程分支。将分支在远程仓库中删除
例:
git push origin --delete test3
Maven
仓库配置
**参考:**https://maven.aliyun.com/mvn/guide。阿里云Maven官方网址
手动安装jar包到本地仓库
命令:mvn install:install-file -DgroupId=com.oracle(看pom) -DartifactId=ojdbc6(看pom) -Dversion=11.2.0.4.0(看pom) -Dpackaging=jar(类型) -Dfile=ojdbc6.jar(要安装的jar文件名称)
**作用:**将外部jar包安装到本地仓库
例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4idgKpi-1626258218861)(D:\学习资料\学习笔记\image\工作技术文档\image-20210223112102038.png)]
H:\jiashi\project\AWSBPM2\bin\jdbc>mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.4.0 -Dpackaging=jar -Dfile=ojdbc6.jar
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-install-plugin:2.4:install-file (default-cli) @ standalone-pom ---
[INFO] Installing H:\jiashi\project\AWSBPM2\bin\jdbc\ojdbc6.jar to C:\Users\wsw16\.m2\repository\com\oracle\ojdbc6\11.2.0.4.0\ojdbc6-11.2.0.4.0.jar
[INFO] Installing C:\Users\wsw16\AppData\Local\Temp\mvninstall5884046384908393654.pom to C:\Users\wsw16\.m2\repository\com\oracle\ojdbc6\11.2.0.4.0\ojdbc6-11.2.0.4.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.641 s
[INFO] Finished at: 2021-01-27T15:22:49+08:00
[INFO] ------------------------------------------------------------------------
Tomcat
IDEA乱码问题
更改地方:
idea的tomcat的VM options = -Dfile.encoding=UTF-8
tomcat安装目录的logging.properties