其他
文章平均质量分 73
lang20150928
stay hungry stay foolish
展开
-
weblogic怎么配置控制台日志输出路径
登录到WebLogic Server的管理控制台,地址通常是,其中hostname是服务器主机名或IP地址,port是管理控制台的端口号。在日志配置页面中,可以设置日志文件的位置、文件大小、旋转策略以及其他相关的日志参数。主要关注的是设置,修改此选项来指定新的日志文件存储路径。保存更改,并根据需要重启服务器以使配置生效。如果不想通过控制台配置,还可以直接编辑服务器的启动脚本(如或),在其中手动设置日志路径相关的Java系统属性,如。原创 2024-04-19 10:55:16 · 809 阅读 · 0 评论 -
*-over-slf4j 相关依赖包
-over-slf4j 是 SLF4J 提供的一系列桥接依赖包,它们用于将其他日志框架的API调用重定向到SLF4J,这样就可以使用统一的SLF4J接口,并通过配置SLF4J的绑定器来选择实际的日志实现。如果你的应用或依赖的第三方库使用了JCL,但你想通过SLF4J和你选择的日志框架(如Logback、Log4j 2等)来处理日志,可以添加这个依赖。如果你的应用或依赖的第三方库使用了Log4j 1.x,但你想通过SLF4J和你选择的日志框架来处理日志,可以添加这个依赖。原创 2023-12-29 10:10:02 · 416 阅读 · 0 评论 -
Quartz线程调度源码分析
Quartz作为任务调度的组件,其中涉及到多种线程,主要分为主线程、调度线程和工作线程。主线程:创建Quartz的调度工厂(SchedulerFactory)、调度器(Scheduler)、触发器(Trigger)、任务(Job)并启动调度器的线程。这里的主线程只是为了区分Quartz内部线程,与程序的主线程并不等价,可以是任意的其他非Quartz线程。调度线程:根据触发条件获取需要执行的任务并分配给工作线程,只有一个工作线程:真实执行Job的线程,一般有多个。原创 2023-07-25 22:00:00 · 676 阅读 · 0 评论 -
Invalid <url-pattern> [sso.action] in filter mapping
Caused by: java.lang.IllegalArgumentException: Invalid [sso.action] in filter mapping原创 2023-03-03 13:56:04 · 710 阅读 · 0 评论 -
使用easyexcel模板导出的两个坑(Map空数据列错乱和不支持嵌套对象)
easyexcel模板支持的两个问题(数据错乱和数据为空)原创 2022-07-04 14:47:18 · 3277 阅读 · 3 评论 -
WebService客户端请求失败 can not create a secure xmlinputfactory
can not create a secure xmlinputfactory原创 2022-06-22 22:38:06 · 228 阅读 · 0 评论 -
Druid获取连接失败(GetConnectionTimeoutException: wait millis 5000, active 1)
com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 5000, active 1原创 2022-06-08 10:47:44 · 6926 阅读 · 1 评论 -
<<程序员底层思维>>概略
第一章:抽象思维抽象思维是程序员最重要的思维能力之一,抽象的过程就是通过归纳总结、分析综合来寻找共性、提炼相关概念的过程。语言和抽象是一体的,抽象的概念只有通过语言才能表达出来,因此命名至关重要。过多地使用基础类型可能意味着抽象的缺失,需要对这些业务概念进行封装和抽象。重复代码意味着抽象缺失,提取重复代码只是完成了重构的第一步,关键是后续的命名。抽象具有层次性,抽象层次越高,内涵越小、外延越大,扩展性越好;反之,抽象层次越低,内涵越大,外延越小,扩展性越差,但语言表达能力越强。对抽象层次的拿捏体原创 2022-05-29 10:48:18 · 487 阅读 · 0 评论 -
Java Web项目模拟https部署
生成公钥和私钥首先执行以下命令生成一个公钥和私钥(这里密码设置为password)keytool -genkeypair -alias tomcat -keyalg RSA -keypass password -storepass password -keystore d:/server.keystore关于keytool命令的说明 https://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.htmltomc原创 2022-05-23 19:07:05 · 130 阅读 · 0 评论 -
安全的发布
以下是线程不安全的延迟初始化public class UnsafeLazyInitialization { private static Resource resource; public static Resource getInstance() { if (resource == null) resource = new Resource(); // unsafe publication return resource;原创 2022-05-07 21:58:47 · 137 阅读 · 0 评论 -
如何减少锁的竞争
在并发程序中,对可伸缩性的最主要威胁就是独占方式的资源锁,有3中方式可以降低锁的竞争程度:减少锁的持有时间降低锁的请求频率使用带有协调机制的独占锁减少锁的范围降低发生竞争可能性的一种有效方式就是缩短锁的持有时间。例如,将一些与锁无关的代码移除同步代码块,尤其是那些开销较大的操作,以及可能被阻塞的操作,例如I/O操作。比如在以下程序清单中,其中的锁被持有过长的时间。userLocationMatches方法在一个Map对象中查找用户的位置,并使用正则表达式进行匹配以判断结果值是否匹配所提供的原创 2022-04-23 11:16:53 · 378 阅读 · 0 评论 -
Weblogic启动SpringBoot项目报错(类冲突)
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.四月 11, 2022 4:48:10 下午 org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter report严重:***************************原创 2022-04-11 20:05:10 · 577 阅读 · 0 评论 -
birt打印pdf内存溢出查询
首先通过top命令查看top - 10:36:06 up 377 days, 19:01, 4 users, load average: 7.58, 5.58, 3.58Tasks: 321 total, 3 running, 318 sleeping, 0 stopped, 0 zombie%Cpu(s): 79.4 us, 1.2 sy, 0.0 ni, 11.7 id, 7.4 wa, 0.0 hi, 0.2 si, 0.0 stKiB Mem : 16266732原创 2022-03-18 10:48:47 · 337 阅读 · 0 评论 -
gradle构建工具学习系列–008Task深入
gradle构建工具学习系列定义类跟上一章一样首先创建一个gradle项目,然后在构造脚本中定义一个类class ProjectVersion { Integer major Integer minor Boolean release ProjectVersion(Integer major, Integer minor) { this.major = major this.minor = minor this.re.原创 2021-12-19 15:14:22 · 711 阅读 · 0 评论 -
gradle构建工具学习系列–007Gradle构建块
gradle构建工具学习系列每个Gradle构建都包含三个基本构建块:project、task和property。每个构建包含至少一个project,进而又包含一个或多个task。project和task暴露的属性可以用来控制构建。Gradle使用领域驱动设计(DDD)的原理为其自己的领域构建软件建模。因为在Gradle API中有相应的类来表示project和task。项目project在Gradle术语当中,一个项目(project)代表一个正在构建的组件(比如一个jar文件)或者一个想要完.原创 2021-12-19 13:46:03 · 216 阅读 · 0 评论 -
gradle构建工具学习系列–006多模块SpringBoot项目
gradle构建工具学习系列首先从官方下载一个SpringBoot项目git clone https://github.com/spring-guides/gs-multi-module.git修改 gradle/wrapper/gradle-wrapper.properties 文件当中的gradle版本,结果如下#Sun Dec 19 10:45:20 CST 2021distributionUrl=https\://services.gradle.org/distributions/g.原创 2021-12-19 11:18:51 · 616 阅读 · 0 评论 -
gradle构建工具学习系列–005SpringBoot项目
gradle构建工具学习系列首先从官方下载一个SpringBoot项目git clone https://github.com/spring-guides/gs-rest-service.git在这个项目的complete目录下是一个完整的SpringBoot项目,同时支持gradle构建和maven构建。在导入到IDEA之前需要先修改使用的gradle版本(保证不与IDEA冲突)。这里选择版本为6.8.1,因为Spring Boot插件最低需要这个版本。修改之后如下所示#Sat D.原创 2021-12-18 20:40:26 · 922 阅读 · 0 评论 -
gradle构建工具学习系列–003简单java项目
gradle构建工具学习系列搭建项目创建一个空目录,比如D:\gradle\app,继续创建空目录mkdir -p src/main/java/hello然后在该目录下创建两个Java文件,分别为src/main/java/hello/HelloWorld.javapackage hello;public class HelloWorld { public static void main(String[] args) { Greeter greeter = new Greet.原创 2021-12-18 19:35:22 · 299 阅读 · 0 评论 -
gradle构建工具学习系列–004简单java项目和IDEA
gradle构建工具学习系列参考官方文档:Building Java Applications Sample创建一个demo名称的目录。进入该目录中打开命令行窗口,输入gradle init并依次选择6 1 1,项目名称和资源包名称都默认。创建项目:将该项目导入到IDEA当中。idea的相关设置如下导入之后项目结构如下进行项目构建构建成功,控制台显示如下查看构建文件build.gradle,首先在这个文件中定义了两个插件plugins { // Apply .原创 2021-12-18 14:42:44 · 529 阅读 · 0 评论 -
gradle构建工具学习系列--001关于版本选择的问题
gradle构建工具学习系列首先是关于当前gradle版本选择的一个问题。在很多情况下,都是希望从新版本开始学习,可是学习gradle直接选用一个高版本可能是非常坑。比如一开始我选择的版本是7.0。λ gradle -v------------------------------------------------------------Gradle 7.0------------------------------------------------------------Build .原创 2021-12-18 12:14:00 · 929 阅读 · 0 评论 -
gradle构建工具学习系列
系列文章目录原创 2021-12-18 12:05:23 · 458 阅读 · 0 评论 -
gradle构建工具学习系列--002使用gradle的命令行
开始使用gradle安装好gradle之后,在控制台输入以下命令gradle -v在D盘创建一个gradle文件夹并进入其中,创建一个文件,名称为build.gradle,其中的内容为task helloWorld{ doLast { println 'Hello World!' }}然后进入到这个目录当中,执行以下命令gradle -q helloWorld等待一会(项目构建)之后,控制台会输出Hello World!。上面命令通过-q定义可选命令行选项quiet,告诉原创 2021-12-15 21:21:43 · 1259 阅读 · 0 评论 -
并发编程之ForkJoin工作原理分析
任务类型思考: 线程池的线程数设置多少合适?我们调整线程池中的线程数量的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能。在实际工作中,我们需要根据任务类型的不同选择对应的策略。CPU密集型任务CPU密集型任务也叫计算密集型任务,比如加密、解密、压缩、计算等一系列需要大量耗费 CPU 资源的任务。对于这样的任务最佳的线程数为 CPU 核心数的 1~2 倍,如果设置过多的线程数,实际上并不会起到很好的效果。此时假设我们设置的线程数量是 CPU 核心数的 2 倍以上原创 2021-12-11 19:52:55 · 4219 阅读 · 0 评论 -
阻塞队列BlockingQueue实战及其原理分析
并发编程系列阻塞队列介绍Queue接口public interface Queue<E> extends Collection<E> { //添加一个元素,添加成功返回true, 如果队列满了,就会抛出异常 boolean add(E e); //添加一个元素,添加成功返回true, 如果队列满了,返回false boolean offer(E e); //返回并删除队首元素,队列为空则抛出异常 E remove(); .原创 2021-12-11 19:09:48 · 172 阅读 · 0 评论 -
深入理解AQS之ReentrantReadWriteLock详解
并发编程系列读写锁介绍现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁(读多写少)。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源(读读可以并发);但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写操作了(读写,写读,写写互斥)。在读多于写的情况下,读写锁能够提供比排它锁更好的并发性和吞吐量。针对这种场景,JAVA的并发包提供了读写锁ReentrantReadWriteLock,它内部,维护了一对相关的.原创 2021-12-10 21:42:55 · 142 阅读 · 0 评论 -
深入理解AQS之CyclicBarrier
字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态(屏障点)之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。CyclicBarrier的使用构造方法// parties表示屏障拦截的线程数量,每个线程调用 await 方法告诉 CyclicBarrier 我已经到达了屏障,然后当前线程被阻塞。 public CyclicBarrier(int parties) // 用于在线程到达屏障时,优先执行 barrierAction,方便处理更复原创 2021-12-10 20:32:13 · 227 阅读 · 0 评论 -
深入理解AQS之CountDownLatch
并发编程系列CountDownLatch(闭锁)是一个同步协助类,允许一个或多个线程等待,直到其他线程完成操作集。CountDownLatch使用给定的计数值(count)初始化。await方法会阻塞直到当前的计数值(count)由于countDown方法的调用达到0,count为0之后所有等待的线程都会被释放,并且随后对await方法的调用都会立即返回。这是一个一次性现象 —— count不会被重置。如果你需要一个重置count的版本,那么请考虑使用CyclicBarrier。CountDow.原创 2021-12-10 20:00:01 · 295 阅读 · 0 评论 -
一个声明式Jenkins流水线完整小案例
pipeline { // 通过agent指定执行节点 // agent any告诉Jenkins该流水线可以运行在任何一个定义好的代理节点上,而不关心它具有什么标签 agent any environment { TIMEZONE = "eastern" TIMEZONE_DS = "${TIMEZONE}_daylight_savings" } // 指定全局配置当中的工具 tools {原创 2021-12-09 20:13:47 · 625 阅读 · 0 评论 -
代码漏洞说明
1. 代码注入:命令注入命令注入是指,在应用程序执行的命令中包含来源于不可信数据时,程序本身没有对这些不可信数据做正确、合理的验证和过滤,导致系统执行恶意命令。例1:以下代码通过Runtime.exec()方法调用Windows的dir命令,列出目录列表。package com.syn;import java.io.*;public class DirList { public static void main(String[] args) { String dir =原创 2021-12-01 17:48:57 · 2009 阅读 · 0 评论 -
并发锁机制之深入理解synchronized
并发编程系列Java共享内存模型带来的线程安全问题思考: 两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗?public class SyncDemo { private static int counter = 0; public static void increment() { counter++; } public static void decrement() { co.原创 2021-11-30 20:23:47 · 479 阅读 · 0 评论 -
jenkins传统的并行语法简单案例
node { stage('Parallel Demo') { // 并行的运行步骤 // 用于存储步骤的映射 def stepsToRun = [:] for(int i = 1;i < 5;i++){ stepsToRun["Step${i}"] = { node{ echo "start"原创 2021-11-30 19:08:47 · 582 阅读 · 0 评论 -
jenkins有条件的执行功能流水线简单案例
首先创建一个Pipeline任务脚本式流水线代码node { def responses = null // 用户输入 string参数允许用户输入一个字符串 choice允许用户从一个选项列表当中选择 stage('selection'){ responses = input message: 'Enter branch and select build type', parameters:[string(defaultValue:'',d原创 2021-11-30 17:36:00 · 668 阅读 · 0 评论 -
scratches
GET http://localhost:8888/user/T999999?id=999&value=contentContent-Type: application/jsonxquant-token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjcmVhdGVUb2tlblRpbWUiOjE2MzAzNzg2MDgyNTksImJpekRhdGUiOiIyMDIxLTA1LTE0IiwidXNlck5hbWUiOiJUOTk5OTk5IiwiZW5Dcn原创 2021-09-01 21:21:34 · 177 阅读 · 0 评论 -
Logback学习系列(五) - 配置文件加载流程
Logback学习系列使用过logback的人几乎都知道logback.xml配置文件,通过这个文件可以针对打印策略做各种配置。但是,可能很多人并不知道,配置文件也支持groovy语法(logback.groovy),甚至没有配置文件,对于logback来说,也是一种配置(默认配置).logback的自动配置流程的逻辑都在ch.qos.logback.classic.util.ContextInitializer当中。在前面章节当中我们谈到过org.slf4j.impl.StaticLoggerBi.原创 2021-08-15 18:28:55 · 933 阅读 · 0 评论 -
Logback学习系列(四) - 请求大体流程
Logback学习系列通过前面的学习,已经大致了解了logback的几个重要的功能模块:Logger、Appender、PatternLayout,以及其中涉及到Level、Filter,现在来看一下在一次日志记录当中他们所扮演的角色已经作用的先后顺序。配置文件(logback.xml)如下<?xml version="1.0" encoding="UTF-8" ?><configuration> <appender name="STDOUT" .原创 2021-08-14 23:22:00 · 501 阅读 · 0 评论 -
Logback学习系列
官方文档:http://logback.qos.ch/manual/introduction.html官方项目路径:https://github.com/qos-ch/logback当前系列版本:1.2.3依赖如下<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>原创 2021-08-13 21:57:05 · 146 阅读 · 0 评论 -
Logback学习系列(二)- Logger详解
Logback项目(版本为1.2.3)分为三个模块,官方GitHub地址为:Logback官方源码地址<module>logback-core</module><module>logback-classic</module><module>logback-access</module>另外还有两个模块,logback-site和logback-examples用于提供站点资源和模板案例,一般项目使用日志不会包含这两个模块。所以原创 2021-08-13 21:51:20 · 684 阅读 · 0 评论 -
Logback学习系列(一)- 项目搭建
创建一个maven项目,并引入logback<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://m原创 2021-08-12 21:29:20 · 174 阅读 · 0 评论 -
Spring当中一个巧妙的lazy方式
创建的时候不设置具体的PasswordEncoder,而是将上下文传入进去,在真实调动接口方法的时候才去容器中获取其他的PasswordEncoder实现static class LazyPasswordEncoder implements PasswordEncoder { private ApplicationContext applicationContext; private PasswordEncoder passwordEncoder; LazyPasswordEncoder(Appl原创 2021-07-28 16:16:01 · 101 阅读 · 0 评论 -
在现有的线程安全类中添加功能
文章目录前言一、扩展一个类二、客户端加锁机制三、组合总结前言Java类库中包含许多有用的“基础模块”类。通常,我们应该优先选择重用这些现有的类而不是创建新的类:重用能降低开发工作量、开发风险(因为现有的类都已经通过测试)以及维护成本。有时候,某个现有的线程安全类能支持我们需要的所有操作,但更多时候,现有的类只能支持大部分的操作,此时就需要在不破坏线程安全性的情况下添加一个新的操作。假如,假设需要一个线程安全的链表,她需要提供一个原子的“若没有则添加”的操作。同步的List类已经实现了大部分的功能,原创 2021-03-18 22:45:17 · 87 阅读 · 0 评论