开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
Computer Science

Spring boot 的彩色日志

我们基本上都知道 Spring 使用的是 logback 为日志配置的。 如果在你的项目中启用了你自己定义的 logback.xml 配置的话,本来是彩色的日志输出就变成黑白色了。 瞬间感觉有点没那么好看了,有没有什么办法让 Spring 在自己的项目中的日志输出也输出彩色呢?     如何修改配置 其实需要修改的地方有几个,但是都是比较简单的修改。 你只需要配置下就行了。 application.properties 在上面的配置文件中添加下面的配置: spring.output.ansi.enabled=always 这里如果不配置的话,你的日志系统中将不会显示为彩色的日志。 如果你使用的 application.yml 为配置文件的话。 你的配置文件应该看起来如下: spring: output: ansi: enabled: always logback.xml 你项目中的 logback.xml 配置文件。 首先需要 include 下面的资源到 logback.xml 这个配置文件上面。 <include resource="org/springframework/boot/logging/logback/defaults.xml" /> 然后在输出的 pattern 中,使用下面的配置 <pattern>${CONSOLE_LOG_PATTERN}</pattern> 这样你的控制台就可以输出彩色的配置了。 这样配置的原因很简单,因为 CONSOLE_LOG_PATTERN 这个参数是在资源 org/springframework/boot/logging/logback/defaults.xml 中定义的。 具体定义的内容为: <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> 你可以访问下面的链接来查看官方的配置: https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml   我们可以在这里直接引用在官方配置属性配置就可以了,这样你的配置文件就可以输出为彩色的日志了。   如上图,我们可以看到输出的彩色日志。   https://www.ossez.com/t/spring-boot/565

2020年10月09日 0Comments 756Browse 0Like Read more
Computer Science

IntelliJ IDEA 重做快捷键和配置哲学

在开始使用 IntelliJ IDEA 的时候,有一组非常重要的快捷键你可能不太适应。 尤其是针对从 Eclipse 转移过来的用户。 那就是重做和撤销快捷键。Redo 和 Undo 。 快捷键 在 Windows 中,很多用户都知道撤销的快捷键是 Ctrl +Z,如果是重做的话,那快捷是 Ctrl + Y。 但是 IntelliJ IDEA 的重做快捷键却不是这么定义的,IntelliJ IDEA 定义 Ctrl + Shift + Z 为重做。 这就导致不少用户在转过来后一脸懵逼。 其实,你也可以在搜索上,搜索关键词 redo 和 undo 来了解 IntelliJ IDEA 定义的快捷键。     经过一段时间的了解,IntelliJ IDEA 的快捷键定义哲学应是尽量保持后面的字母不变,在不同功能切换中添加 Ctrl, Alt ,和 Shift 的组合。 比如说搜索对话框,基本上所有人都知道双击 Shift 可以打开搜索对话框。 如果是搜索 Classes,快捷键是 Ctrl + N 如果是搜索 Files,快捷键是 Ctrl + Shift + N 如果是搜索 Symbols,快捷键是 Ctrl + Alt + Shit + N 最后一个是 Action,Action 和 双击 Shift 打开搜索对话框的快捷键不一样,使用的是 Ctrl + Shift + A,使用 Action 的第一个字母。     从这里的配置,我们大致了解下 IntelliJ IDEA 的快捷键配置哲学就是尽量保持第一个和最后一个键位不变,在中间添加其他功能键,以便于你记忆。 https://www.ossez.com/t/intellij-idea/563  

2020年10月09日 0Comments 883Browse 0Like Read more
Computer Science

JUnit 5 测试 Spring 引擎的时候提示 junit-vintage 错误

在 Spring 项目中运行测试的时候,得到错误: TestEngine with ID 'junit-vintage' failed to discover tests” with Spring 这个错误的原因是 JUnit 的引擎,使用了 junit-vintage 引擎。 junit-vintage 是 Junit 4 中使用的引擎,如果你的项目使用了 Junit 5 的话,你需要在 spring-boot-starter-test 中将 JUnit 4 的引擎从测试中删除。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> junit-vintage-engine 和 junit-jupiter-engine 有什么不同 junit-vintage-engine 是 JUnit 4 中使用的测试引擎。 junit-jupiter-engine 是 JUnit 5 中使用的测试引擎。 如果你的 Spring 项目使用的新的 Spring Boot 版本的话,你应该默认使用了 JUnit 5 的引擎,因此为了兼容性,你需要在 spring-boot-starter-test 这个 POM 引用的时候将 JUnit 4 的引擎去除掉。     上面的这个配置你可以尝试下能解决你的问题。   https://www.ossez.com/t/junit-5-spring-junit-vintage/562

2020年10月09日 0Comments 1009Browse 0Like Read more
Computer Science

IntelliJ IDEA 的 Spring 项目如何查看 @Value 的配置和值

当你打开项目或者项目中的文件的时候,如果你有 Spring 的 Value 的配置,Intellij 将会自动将参数替换为值。 如果你单击上面的值,那么这个配置参数将会显示为配置的参数名。     如果你还想显示值的话,你需要重新打开这个文件或者项目。 有没有什么快捷键可以快速进行切换。 快捷键 这个配置是在 Intellij 的 Code > Folding 中进行配置的。 快捷键是是 Ctrl + NumberPad + 快捷键是是 Ctrl + NumberPad - NumberPad +,这个键是数字小键盘上的 + 号 NumberPad -,这个键是数字小键盘上的 - 号     因为这个快捷键在小键盘上,因此可能你比较难找到。 我们在这里标识出来。     Intellij 的快捷键定义。   https://www.ossez.com/t/intellij-idea-spring-value/561

2020年10月09日 0Comments 620Browse 0Like Read more
Computer Science

Maven 编译拷贝资源的时候提示 UTF-8 编码信息

如下面的提示内容。 提示的是在拷贝资源文件的时候,因为没有指定编码,将会使用 UTF-8 对编码进行转换。 [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Using 'UTF-8' encoding to copy filtered properties files. [INFO] Copying 2 resources [INFO] Copying 2 resources [INFO] The encoding used to copy filtered properties files have not been set. This means that the same encoding will be used to copy filtered properties files as when copying other filtered resources. This might not be what you want! Run your build with --debug to see which files might be affected. Read more at https://maven.apache.org/plugins/maven-resources-plugin/examples/filtering-properties-files.html     解决办法 在你的 pom 配置文件中 maven-resources-plugin 插件配置中,添加一个 <propertiesEncoding>UTF-8</propertiesEncoding> 这个参数。如果你的 pom 配置文件没有配置过 maven-resources-plugin 插件的话,你需要将这个插件先添加进去。 具体的配置参数如下: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <configuration> <propertiesEncoding>UTF-8</propertiesEncoding> </configuration> </plugin>     上图显示了需要的配置状态。   https://www.ossez.com/t/maven-utf-8/560

2020年10月09日 0Comments 586Browse 0Like Read more
Computer Science

Azure AD 获得 Token 的时候得到 invalid_scope 的错误

完整的错误信息如下: { "error": "invalid_scope", "error_description": "AADSTS70011: The provided request must include a 'scope' input parameter. The provided value for the input parameter 'scope' is not valid. The scope api://4ab1a0b7-da1d-423d-9fc3-e3a6fabd98af/access_as_user is not valid.\r\nTrace ID: 8a08a7db-d914-4012-8159-067fdc6e4900\r\nCorrelation ID: 78adae38-0ef1-4147-b30e-00e5e93bdac0\r\nTimestamp: 2020-10-07 19:42:27Z", "error_codes": [ 70011 ], "timestamp": "2020-10-07 19:42:27Z", "trace_id": "8a08a7db-d914-4012-8159-067fdc6e4900", "correlation_id": "78adae38-0ef1-4147-b30e-00e5e93bdac0" } 下图是我们发送的数据和返回的错误信息。     这里错误的关键因素是你的 scope 可能是你的 scope 已经注册了,但是在获得 token 的时候不能使用上面的 scope。 你需要将你的 scope 从 api://4ab1a0b7-da1d-423d-9fc3-e3a6fabd98af/access_as_user 修改为 api://4ab1a0b7-da1d-423d-9fc3-e3a6fabd98af/.default 上面修改表示的意思是,你只能使用以 /.default 结尾 来访问获得 token 字符串。     请比较上面的 scope 就比较明确的了解需要的。   https://www.ossez.com/t/azure-ad-token-invalid-scope/559

2020年10月08日 0Comments 781Browse 0Like Read more
Computer Science

Azure active directory 获得访问的 token

一直认为 Azure 的设计过于复杂,权限要求过多,就感觉是一群技术宅做的系统。相对 AWS 来说,更加喜欢 AWS 的功能设计。 但是因为工作需要又不得不使用 Azure,所以把使用过程中遇到的一些问题都记录下来,以期望能帮助有需要的人。 这篇文章主要用于介绍如何使用 postman 来获得 Azure active directory 的用户访问 token,这个步骤是使用 Azure 对用户鉴权使用的第一步。 确定 tenant Azure 允许你有多个 tenant,你可以在 Azure 的控制台中对 tenant 进行切换,这个是你需要做的第一步。确定你希望使用的 teant。 如果你还没有 tenant 的话,你需要创建一个 tenant。     当找到你需要的 Tenant 以后,你会获得一个 tenant ID,这个非常重要。 因为这个表示的是你 AD 的唯一标识,所以你需要记录下来。 Tenant ID 在你界面中的的 Tenant Information 里面     注册 APP 不管你使用任何类型的应用,你都需要先注册一个 APP。 单击左侧的注册 APP 按钮。     可以单击界面的上侧,注册一个新的应用。     在弹出的界面中,输入注册需要的相关信息。 注册的名字你可以自行定义,需要注意的是,你需要选择: Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox) 这个注册选项。 假设,我们这里注册的应用是 WEB。     获得基本参数 当你注册成功后,你可以单击你的注册名,然后你将会看到注册的应用信息界面。 在这个界面中,你会得到 Application (client) ID Directory (tenant) ID Object ID 这几个参数,这几个参数对你来说非常重要,你需要保存下来。     设置 secrets 单击左侧的 Certificates & secrets,你将会看到密钥生成的界面。 在这里,你可以单击生成一个新的 Secret。 你可以不用给这个 secret 进行命名,你也可以命名你希望的名字。请注意将 secret 进行保存,因为下次你访问的时候,secret 就不会再显示了。     API 赋权 你需要确定 Microsoft Graph 有用户读取的权限。     如果没有这个权限的话,你需要单击上面的添加权限来将权限添加进来。     选择 Microsoft Graph 的选项,然后将用户的权限添加进来。     暴露 API 你需要将你的 API 进行暴露,允许进行访问。     你需要添加一个新的 Scope,在这里我们假设你添加了一个叫做 user.read 的 scope。 在弹出的界面中你可以输入你需要的选项。 你可以选择 Admins and users     修改 Manifest 这个配置参数你需要手动修改。 主要修改参数是:oauth2AllowImplicitFlow 修改为 true     至此,Azure 的配置已经完成了,下一步就是配置你的客户端进行测试了。 Postman 测试 可以通过 Postman 进行测试获得 token。 你有 2 种方法进行测试,我们测试的是不通过授权,直接通过 secret 来获得 token。 另一种方法,我们在其他方式中再进行测试。 在 Postman 中添加一个 API 访问。 访问方法 使用 GET 进行访问 访问 URL 访问的 URL 是:https://login.microsoftonline.com/tenant ID/oauth2/v2.0/token 这里有一个参数要进行替换,就是 Tenant ID,这个 ID 在开始的时候就用于标识一个 AD,我们已经在前面的步骤保存了。 Headers 添加参数 Content-Type 为 application/x-www-form-urlencoded     Body grant_type : client_credentials client_id: 4ab1a0b7-da1d-423d-9fc3-e3a6fabd9 client_secret:SYk.HZT_jK6ZE1~3tle2Ha0MeV.9 scope: api://4ab1a0b7-da1d-423d-9fc3-e3a6fabd9/.default 这里参数有一根需要注意的地方。 client_id 是我们在最开始的时候 APP 创建成功后获得 client_id。 client_secret 是我们我们在 APP 注册成功后,创建的秘钥。 scope:是我们创建的的 scop,但是需要注意的是,我们创建的 scope 是以 user.read 结尾的,在我们获得 token 的时候,不能使用上面结尾的 scope,而需要将 user.read 修改为 .default 因此 scope 的配置就是 api://client_id/ .default. 请注意,你一定要这么配置,否则你拿不到 token 当一切配置好后,你可以发送请求,如果一切正确的话,你将会看到服务器返回给你的 token 字符串。   https://www.ossez.com/t/azure-active-directory-token/558

2020年10月08日 0Comments 663Browse 0Like Read more
Computer Science

Discourse 如何进行重启

Discourse 是使用基于 Docker 技术进行构建的。 因此在通常情况下,如果你需要对 Discourse 进行重启的话,你需要进入 docker 容器里面,然后进行重启。 通常可以使用下面的命令: cd /var/discourse ./launcher enter app sv restart unicorn 我们通过执行上面的命令后可以完成 Discourse 的重启。 [root@www ~]# cd /var/discourse/ [root@www discourse]# ./launcher enter app root@vps-f2a02f66-app:/var/www/discourse# sv restart unicorn ok: run: unicorn: (pid 154799) 0s root@vps-f2a02f66-app:/var/www/discourse# 上面的命令中 ./launcher enter app 是进入 docker 容器的命令。 sv restart unicorn 这个命令实际上是在容器内执行的,告诉 docker 对容器进行进行重启。

2020年10月06日 0Comments 916Browse 0Like Read more
Computer Science

CentOS 8 Apache 启用 SSL

在 CentOS 8 安装成功后,如果希望启用 ssl,你需要执行下面的一些操作。 安装 mod_ssl 使用下面的命令安装 mod_ssl # dnf install mod_ssl 确定 mod_ssl 被启用 这一步不是必须的,但是你可以使用下面的命令确定安装的 mod_ssl 已经被启用了。 apachectl -M | grep ssl 服务器可能会返回: 类似上面的情况和内容,你可以通过上面的返回确定 ssl 已经被启用了。 防火墙启用 443 端口 如果已经安装了防火墙的话,你需要为你的防火墙开放 443 的端口。 需要执行下面的命令: firewall-cmd --zone=public --permanent --add-service=https firewall-cmd --zone=public --permanent --add-port=80/tcp firewall-cmd --reload systemctl restart firewalld 配置虚拟主机 如果你的 Apache httpd 服务使用了虚拟主机,你可以在下面的文件中配置你虚拟主机的信息。 /etc/httpd/conf.d/ssl.conf 在上面的配置文件中,需要设置 key 和 crt 信息,请参考网络上的配置。 通过上面的步骤,就完成了在 CentOs 8 的 httpd 服务器上配置使用 ssl 的所有内容。步骤比较简单,只需要按照上面的顺序就可以完成了。   https://www.ossez.com/t/centos-8-apache-ssl/554

2020年10月06日 0Comments 601Browse 0Like Read more
Computer Science

CentOS 8 启用 NTP 服务

NTP 服务是什么和为什么我们需要在我们的服务器启用 NTP 服务? 可能很多人都不是非常了解,简单来说就是我们希望我们服务器的时间是准确的没有偏差的。这个的意义在数据插入和你程序取得计算机时间的时候是准确的。 比如说在 java 中如果 new date() 将会获得计算机当前的时间,如果当前的世界不准确的话,那么你插入数据库的时间就是混乱的。 同时,我们也希望我们的服务器的时区是准确的,比如说我们常使用的东八区和美国太平洋时间等。 如果计算机有什么原因导致时钟慢了,我们可以通过 ntp 进行同步。 所以针对服务器来说,在设置好时区后,NTP 服务是必须要启用的。 NTP 介绍 网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机[时间同步化的一种协议,它可以使计算机对其服务器或时钟源如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶意攻击。 NTP 的目的是在无序的 Internet 环境中提供精确和健壮的时间服务。 NTP 提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。 NTP 获得 UTC的 时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。这样就有了准确而可靠的时间源。时间按NTP服务器的等级传播。 按照离外部 UTC 源的远近将所有服务器归入不同的 Stratum(层)中。Stratum-1在顶层,有外部 UTC 接入,而 Stratum-2 则从 Stratum-1 获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。 所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础。计算机主机一般同多个时间服务器连接, 利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源来校正主机时间。即使主机在长时间无法与某一时间服务器相联系的情况下,NTP服务依然有效运转。 为防止对时间服务器的恶意破坏,NTP使用了识别(Authentication)机制,检查来对时的信息是否是真正来自所宣称的服务器并检查资料的返回路径,以提供对抗干扰的保护机制。NTP时间同步报文中包含的时间是格林威治时间,是从1900年开始计算的秒数。 安装 NTP 服务 在 CentOS 8 中,我们使用 chronyd 来提供 NTP 的服务。 在 CentOS 上执行下面的命令来进行安装,如果你已经安装过的话,系统会进行提示。 dnf install chrony 开启启用 NTP 服务 在 CentOS 8 中,执行下面的命令,来让服务进程随开机自动启动。 systemctl enable chronyd 上面的命令会随计算机开机的时候自动运行。 检查服务器 NTP 服务器地址 请执行下面的命令,确定 NTP 服务器的地址已经配置成功了。 chronyc sources 上面命令会显示默认配置的 NTP 服务器地址。     强制同步 在安装操作系统后,可能会遇到时间不准确的情况。 可以使用下面的命令对服务器的世界进行强制同步一次。 chronyc -a makestep 服务器的输入内容是: [root@vps-c853c8ac home]# chronyc -a makestep 200 OK [root@vps-c853c8ac home]# 然后可以在服务器上执行 date +%z 以确定当前的时区和你可用使用 date 确定当前服务器的时间。 date 通过这个设置,我们就可以在服务器上使用 NTP 进行同步了,你就不需要对服务器的时间进行调整了。 https://www.ossez.com/t/centos-8-ntp/555

2020年10月06日 0Comments 586Browse 0Like Read more
1…180181182183184…304
Archives
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,369)
    • Confluence (663)
    • Gradle (12)
  • U.S. (524)
  • 文化旅游 (146)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1