化石原创文章,转载请注明来源并保留原文链接


1、项目的application.properties中,写入

server.error.whitelabel.enabled: false

2、项目resources目录下,建立public目录,下方建立error目录,然后放置

404.html文件,测试内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Something went wrong! </h1>
    <h2>Our Engineers are on it</h2>
    <a href="/">Go Home</a>
</body>
</html>

这样准备工作就完毕了。

启动Tomcat,使用浏览器访问没有准备的url连接,如果没有错误的话,就会看到上面的404页面的内容。

SpringBoot版本:2.2.1


化石原创文章,转载请注明来源并保留原文链接



化石原创文章,转载请注明来源并保留原文链接


工程需要javabase64 1.3.1库,好好的maven dependency在pom.xml中,却发现jar文件一直同步不下来。用网页打开maven reposity,点击页面的view all,发现返回的json也是找不到资源。难道这个库在maven这里维护这么不积极?不知原因。

到javabase64的官网去能下载到jar的zip文件,解开后就可以把里面的jar手动放置到intellij工程,步骤:

1、File | Project Structure …

2、Project Settings | Libraries

3、出现的面板上分成三栏,中间一栏的左上角,点击那个+号(加号)

4、下拉菜单选择java

5、跳出的选择文件对话框中,定位到需要的jar文件,完成点击后就会导入这个jar到工程。

结束。


化石原创文章,转载请注明来源并保留原文链接



化石原创文章,转载请注明来源并保留原文链接


1、Tomcat根据url请求得到当前目录位置,比如url请求是/free,那么当前位置就是/

2、ftl中的涉及的所有文件的路径计算,如果不是绝对路径,那么就以上面计算出的位置为前置,添加ftl中的路径为全路径,搜索资源。


化石原创文章,转载请注明来源并保留原文链接



化石原创文章,转载请注明来源并保留原文链接


使用properties配置log4j2

1、配置文件(使用properties文件)

a) 放置log4j.properties到工程的根目录
b) 代码里指定该log4j.properties文件

String currentDirectory = System.getProperty("user.dir");
System.setProperty("log4j.configurationFile", currentDirectory + File.separator + "log4j.properties");

log4j.properties文件内容:

 status=warn
 name=properties_configuration
 #Give directory path where log files should get stored
 property.basePath=f:\/log\
 appenders=console, rolling
 #ConsoleAppender will print logs on console
 appender.console.type=Console
 appender.console.name=consoleLogger
 appender.console.target=SYSTEM_OUT
 appender.console.layout.type=PatternLayout
 #Specify the pattern of the logs
 appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%t] [%c] [%M] [%l] - %msg%n
 #RollingFileAppender will print logs in file which can be rotated based on time or size
 appender.rolling.type=RollingFile
 appender.rolling.name=fileLogger
 appender.rolling.fileName=${basePath}app.log
 appender.rolling.filePattern=${basePath}app_%d{yyyyMMdd}.log.gz
 appender.rolling.layout.type=PatternLayout
 appender.rolling.layout.pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%t] [%c] [%M] [%l] - %msg%n
 appender.rolling.policies.type=Policies
 #Rotate log file each day and keep 30 days worth
 appender.rolling.policies.time.type=TimeBasedTriggeringPolicy
 appender.rolling.policies.time.interval=1
 appender.rolling.policies.time.modulate=true
 appender.rolling.strategy.type=DefaultRolloverStrategy
 appender.rolling.strategy.delete.type=Delete
 appender.rolling.strategy.delete.basePath=${basePath}
 appender.rolling.strategy.delete.maxDepth=1
 appender.rolling.strategy.delete.ifLastModified.type=IfLastModified
 #Delete files older than 30 days
 appender.rolling.strategy.delete.ifLastModified.age=30d
 #Configure root logger for logging error logs in classes which are in package other than above specified package
 #level: ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
 rootLogger.level=all
 rootLogger.additivity=false
 rootLogger.appenderRef.rolling.ref=fileLogger
 rootLogger.appenderRef.console.ref=consoleLogger

2、代码得到logger句柄

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Logger logger = LogManager.getLogger(name);

3、具体使用

logger.debug(info);
logger.info(info);
logger.warn(info);
logger.error(info);
logger.trace(info);
logger.fatal(info);

使用上面的配置和方法,可以在文件(按上面log4j.properties的配置,在f:/log/app.log中)里和intellij的Console里输出debug、info、warn、error、trace、fatal信息。如果要控制输出的信息,可以在log4.properties文件的最后的部分改动:

rootLogger.level = xxx,比如 rootLogger.level = debug

注:

1、上面的例子代码中因为我们指定的代码是主程序的class的名字,在log4j.properties文件中找不到该名字的logger,所以log4j2会使用rootLogger这个默认的logger。

2、PatternLayout的手册在:

https://logging.apache.org/log4j/2.x/manual/layouts.html


化石原创文章,转载请注明来源并保留原文链接



化石原创文章,转载请注明来源并保留原文链接


使用java的apache HttpClient做一个小东西,发现200多个html连接后,后续的就没有反应了:没有exception、没有error。

第一反应就是以前在C#遇到的差不多问题,HttpClient内部应该有设置连接的最大数量。不过暂时没去查该东西怎么设置,应该在自己的代码中,并没有关闭每个连接,所以应该在原来的每个html工作程序中先关闭连接。

所以,代码开始和关闭如此:

string url = “xxx”;
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet request = new HttpGet(url);
CloseableHttpResponse response = httpClient.execute(request);

response.close();
httpClient.close();

使用上response.close()以后,原来的问题就解决了。


化石原创文章,转载请注明来源并保留原文链接