程序员@老李
https://blog.mostion.com/
左手代码右手烟,记录代码人生!
-
Rocky Linux 8 中禁用 IPv6 并仅启用 IPv4
https://blog.mostion.com/archives/56/
2025-06-17T13:42:00+08:00
在 Rocky Linux 8 中禁用 IPv6 并仅启用 IPv4,可以通过以下步骤完成(推荐使用 nmcli 或直接修改内核参数):方法 1:通过 nmcli 禁用 IPv6(临时生效,重启后保留)1. 查看当前网络连接名称nmcli connection show输出示例(假设连接名为 ens192):NAME UUID TYPE DEVICE
ens192 518fd4a1-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet ens1922. 禁用 IPv6 并仅启用 IPv4nmcli connection modify ens192 ipv6.method "disabled"
nmcli connection up ens192 # 重新激活连接方法 2:修改网络配置文件(永久生效)1. 编辑网卡配置文件vi /etc/sysconfig/network-scripts/ifcfg-ens192在文件中添加或修改以下参数:IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no2. 重启网络服务systemctl restart NetworkManager方法 3:通过内核参数禁用 IPv6(全局禁用)1. 修改 GRUB 配置vi /etc/default/grub在 GRUB_CMDLINE_LINUX 行添加 ipv6.disable=1:GRUB_CMDLINE_LINUX="... ipv6.disable=1"2. 重新生成 GRUB 配置grub2-mkconfig -o /boot/grub2/grub.cfg3. 重启系统reboot验证 IPv6 是否已禁用# 检查网卡是否无 IPv6 地址
ip a | grep inet6
# 应无输出
# 验证内核参数
cat /proc/cmdline | grep ipv6.disable
# 应显示 `ipv6.disable=1`(如果使用方法3)恢复 IPv6(如需启用)1. 恢复 nmcli 配置nmcli connection modify ens192 ipv6.method "auto"
nmcli connection up ens1922. 删除内核参数编辑 /etc/default/grub 移除 ipv6.disable=1,重新生成 GRUB 并重启。注意事项优先级:方法 1/2 仅针对特定网卡,方法 3 是全局禁用。生产环境中建议优先使用方法 1 或 2,避免影响其他服务。兼容性:某些应用程序(如 Docker、Kubernetes)可能依赖 IPv6,禁用前需测试。防火墙:如果使用 firewalld,IPv6 规则会自动失效,无需额外操作。通过上述步骤,系统将仅使用 IPv4 通信。
-
MySQL 8 禁用表名大小写敏感
https://blog.mostion.com/archives/55/
2025-06-17T13:41:52+08:00
在 Rocky Linux 8 上使用 yum(或 dnf)安装 MySQL 8 后,如果需要 禁用表名大小写敏感(即强制表名存储为小写),需修改配置文件并重新初始化数据目录。以下是具体步骤:步骤 1:修改 MySQL 配置文件1. 编辑 MySQL 配置文件(默认路径):vi /etc/my.cnf或(如果存在):vi /etc/my.cnf.d/mysql-server.cnf2. 在 [mysqld] 段落下添加以下参数:[mysqld]
lower_case_table_names=1参数说明:lower_case_table_names=1:表名存储为小写,比较时不区分大小写。注意:MySQL 8 仅在初始化时允许修改此参数,后续更改需重新初始化数据目录!步骤 2:停止 MySQL 服务systemctl stop mysqld步骤 3:删除原有数据目录(谨慎操作!)rm -rf /var/lib/mysql/*此操作会删除所有数据库数据,确保已备份重要数据!步骤 4:重新初始化 MySQL 数据目录mysqld --initialize --user=mysql --lower-case-table-names=1关键点:--initialize:初始化数据目录。--user=mysql:指定运行用户。--lower-case-table-names=1:确保初始化时应用配置。步骤 5:启动 MySQL 服务systemctl start mysqld步骤 6:验证配置1. 登录 MySQL:mysql -u root -p(输入初始化时生成的临时密码,可通过 grep 'temporary password' /var/log/mysqld.log 查看)2. 检查参数是否生效:SHOW VARIABLES LIKE 'lower_case_table_names';输出应为:+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 1 |
+------------------------+-------+常见问题解决1. 初始化报错 --lower-case-table-names=1 无效原因:MySQL 8 要求此参数必须在首次初始化时设置,且不能后续修改。解决:确保数据目录 /var/lib/mysql/ 为空,重新执行初始化命令。2. 表名仍区分大小写原因:可能未正确删除旧数据目录或配置文件未生效。检查:cat /var/lib/mysql/auto.cnf | grep lower_case_table_names如果存在旧配置,需彻底清理数据目录。3. 权限问题若启动失败,检查日志:journalctl -u mysqld修复权限:chown -R mysql:mysql /var/lib/mysql
chmod 750 /var/lib/mysql总结关键步骤:修改配置文件 → 删除数据目录 → 重新初始化。仅限新装:此方法适用于首次安装或可接受数据丢失的情况。生产环境:建议在测试环境验证后再操作,避免数据风险。⚠️ 注意:MySQL 8 默认不允许在初始化后修改 lower_case_table_names,因此必须通过重新初始化实现。
-
解决 Elasticsearch 不能以 root 用户运行的问题
https://blog.mostion.com/archives/54/
2025-06-17T13:39:00+08:00
Elasticsearch 从 5.0 版本开始出于安全考虑,默认不允许以 root 用户运行。以下是解决这个问题的几种方法:方法一:创建专用用户运行 Elasticsearch(推荐)这是最安全和推荐的做法:创建 elasticsearch 用户和组:groupadd elasticsearch
useradd -g elasticsearch elasticsearch更改 Elasticsearch 目录权限:chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/
chown -R elasticsearch:elasticsearch /var/log/elasticsearch/以 elasticsearch 用户启动:sudo -u elasticsearch /usr/share/elasticsearch/bin/elasticsearch方法二:修改系统配置允许以 root 运行(不推荐)如果确实需要以 root 运行(仅用于测试环境):编辑 Elasticsearch 配置文件:vim /etc/elasticsearch/jvm.options添加以下 JVM 参数:-Des.insecure.allow.root=true或者修改启动脚本:vim /usr/share/elasticsearch/bin/elasticsearch在文件开头添加:ES_JAVA_OPTS="-Des.insecure.allow.root=true"
export ES_JAVA_OPTS方法三:使用 systemd 服务(生产环境推荐)创建 systemd 服务文件:vim /etc/systemd/system/elasticsearch.service添加以下内容:[Unit]
Description=Elasticsearch
After=network.target
[Service]
User=elasticsearch
Group=elasticsearch
ExecStart=/usr/share/elasticsearch/bin/elasticsearch
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target启用并启动服务:systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch方法四:使用 Docker 运行如果你使用 Docker,可以这样运行:docker run -d --name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
docker.elastic.co/elasticsearch/elasticsearch:7.9.2注意事项安全警告:在生产环境中以 root 运行 Elasticsearch 有严重安全风险文件权限:确保数据目录、日志目录和配置文件有正确的权限SELinux:如果启用了 SELinux,可能需要额外配置ulimit:可能需要增加文件描述符限制:ulimit -n 65536通过创建专用用户运行 Elasticsearch 是最佳实践,既能满足安全要求,又能保证服务正常运行。
-
SpringBoot 整合线程池
https://blog.mostion.com/archives/53/
2024-08-29T10:01:00+08:00
步骤如下:1. 启动类加入 @EnableAsync 注解@SpringBootApplication
@EnableAsync
public class FacadeH5Application {
public static void main(String[] args) {
SpringApplication.run(FacadeH5Application.class, args);
}
}2. 在方法上加 @Async 注解@Async
public void m1() {
//do something
}3. 创建线程池配置文件# 核心线程数
spring.task.execution.pool.core-size=8
# 最大线程数
spring.task.execution.pool.max-size=16
# 空闲线程存活时间
spring.task.execution.pool.keep-alive=60s
# 是否允许核心线程超时
spring.task.execution.pool.allow-core-thread-timeout=true
# 线程队列数量
spring.task.execution.pool.queue-capacity=100
# 线程关闭等待
spring.task.execution.shutdown.await-termination=false
spring.task.execution.shutdown.await-termination-period=
# 线程名称前缀
spring.task.execution.thread-name-prefix=task-@Configuration
public class ThreadPoolConfig {
@Bean
public TaskExecutor taskExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//设置核心线程数
executor.setCorePoolSize(10);
//设置最大线程数
executor.setMaxPoolSize(20);
//设置队列容量
executor.setQueueCapacity(20);
//设置线程活跃时间
executor.setKeepAliveSeconds(30);
//设置线程名称前缀
executor.setThreadNamePrefix("sendSms-");
//设置拒绝策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//等待所有任务结束后再关闭线程池
executor.setWaitForTasksToCompleteOnShutdown(true);
//设置线程池中任务的等待时间
executor.setAwaitTerminationSeconds(60);
return executor;
}
}配置多个线程池@Configuration
public class ThreadPoolConfig {
@Bean("ThreadPool1")
public TaskExecutor taskExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
......
return executor;
}
@Bean("ThreadPool2")
public TaskExecutor taskExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
......
return executor;
}
}在使用 @Async 注解时就需要指定具体的线程池@Async("ThreadPool1")
public void m1() {
//do something
}
-
鼻塞,脑袋疼
https://blog.mostion.com/archives/52/
2024-08-27T09:23:00+08:00
鼻塞,脑袋疼
-
SpringBoot静态方法调用Spring容器bean的几种方案
https://blog.mostion.com/archives/49/
2023-12-14T13:47:13+08:00
今天遇到一个问题,需要在静态方法中调用哦那个容器Bean,大致代码如下:@Autowired
private static RedisUtil redisUtilBean;
public static String getMsgByRedis(){
redisUtilBean.get("xxx") //这里redisUtilBean一定会是NULL值
}为什么会出现这种情况?原因是Spring容器的依赖注入是依赖set方法,而set方法是实例对象的方法,注入依赖时是无法注入静态成员变量的,在调用的时候依赖的Bean才会为null;解决方案一使用@PostConstruct注解:@Autowired
private RedisUtil redisUtilBean;
//由于静态方法无法使用注入的Bean 定义静态变量
private static RedisUtil redisUtil;
//当容器实例化当前受管Bean时@PostConstruct注解的方法会被自动触发,借此来实现静态变量初始化
@PostConstruct
public void init(){
this.redisUtil = redisUtilBean;
}
public static String getMsgByRedis(){
redisUtil.get("xxx") //这里可以正常使用
}解决方案二利用springboot的启动类中,SpringApplication.run() 方法返回的是一个ConfigurableApplicationContext对象通过定义static变量ConfigurableApplicationContext,利用容器的getBean方法获得依赖对象;@SpringBootApplication
@EnableTransactionManagement
public class Application {
//定义静态的ApplicationContext
public static ConfigurableApplicationContext applicationContext;
public static void main(String[] args) {
applicationContext = SpringApplication.run(Application.class, args);
}
}
//调用 注意Application是我们SpringBoot的启动类
public static String getMsgByRedis(){
Application.applicationContext.getBean(RedisUtil .class).get("xxx")
}解决方案三在我们以前SpringMVC中常用的工具类,通过实现ApplicationContextAware接口,网上也很多这里就把工具类贴出来即可;/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.toher.common.utils.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
* 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.
*
* @author 李怀明
* @version 2017-01-02
*/
@Component
public class SpringContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
//实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextHolder.applicationContext = applicationContext;
}
//取得存储在静态变量中的ApplicationContext.
public static ApplicationContext getApplicationContext() {
checkApplicationContext();
return applicationContext;
}
//从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
checkApplicationContext();
return (T) applicationContext.getBean(name);
}
//从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
//如果有多个Bean符合Class, 取出第一个.
@SuppressWarnings("unchecked")
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
@SuppressWarnings("rawtypes")
Map beanMaps = applicationContext.getBeansOfType(clazz);
if (beanMaps != null && !beanMaps.isEmpty()) {
return (T) beanMaps.values().iterator().next();
} else {
return null;
}
}
private static void checkApplicationContext() {
if (applicationContext == null) {
throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
}
}
public static HttpServletRequest getRequest() {
try {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
} catch (Exception e) {
return null;
}
}
}
调用方法:RedisUtil redisUtil= (RedisUtil) SpringContextHolder.getBean(RedisUtil.class);结束,感谢!
-
SpringBoot 自定义线程池
https://blog.mostion.com/archives/48/
2023-11-29T08:51:00+08:00
我们都知道spring只是为我们简单的处理线程池,每次用到线程总会new 一个新的线程,效率不高,所以我们需要自定义一个线程池。本教程目录:自定义线程池配置spring默认的线程池1. 自定义线程池1.1 修改application.propertiestask.pool.corePoolSize=20
task.pool.maxPoolSize=40
task.pool.keepAliveSeconds=300
task.pool.queueCapacity=501.2 线程池配置属性类TaskThreadPoolConfig.javaimport org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 线程池配置属性类
* Created by Fant.J.
*/
@ConfigurationProperties(prefix = "task.pool")
public class TaskThreadPoolConfig {
private int corePoolSize;
private int maxPoolSize;
private int keepAliveSeconds;
private int queueCapacity;
...getter and setter methods...
}1.3 创建线程池 TaskExecutePool.java/**
* 创建线程池
* Created by Fant.J.
*/
@Configuration
@EnableAsync
public class TaskExecutePool {
@Autowired
private TaskThreadPoolConfig config;
@Bean
public Executor myTaskAsyncPool() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//核心线程池大小
executor.setCorePoolSize(config.getCorePoolSize());
//最大线程数
executor.setMaxPoolSize(config.getMaxPoolSize());
//队列容量
executor.setQueueCapacity(config.getQueueCapacity());
//活跃时间
executor.setKeepAliveSeconds(config.getKeepAliveSeconds());
//线程名字前缀
executor.setThreadNamePrefix("MyExecutor-");
// setRejectedExecutionHandler:当pool已经达到max size的时候,如何处理新任务
// CallerRunsPolicy:不在新线程中执行任务,而是由调用者所在的线程来执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
}1.4 创建线程任务/**
* Created by Fant.J.
*/
@Component
public class AsyncTask {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
@Async("myTaskAsyncPool") //myTaskAsynPool即配置线程池的方法名,此处如果不写自定义线程池的方法名,会使用默认的线程池
public void doTask1(int i) throws InterruptedException{
logger.info("Task"+i+" started.");
}
}1.5 修改启动类给启动类添加注解@EnableAsync
@EnableConfigurationProperties({TaskThreadPoolConfig.class} ) // 开启配置属性支持1.6 测试protected final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private AsyncTask asyncTask;
@Test
public void AsyncTaskTest() throws InterruptedException, ExecutionException {
for (int i = 0; i < 100; i++) {
asyncTask.doTask1(i);
}
logger.info("All tasks finished.");
}2. 配置默认的线程池我本人喜欢用这种方式的线程池,因为上面的那个线程池使用时候总要加注解@Async("myTaskAsyncPool"),而这种重写spring默认线程池的方式使用的时候,只需要加@Async注解就可以,不用去声明线程池类。2.1 获取属性配置类这个和上面的TaskThreadPoolConfig类相同,这里不重复2.2 NativeAsyncTaskExecutePool.java 装配线程池/**
* 原生(Spring)异步任务线程池装配类
* Created by Fant.J.
*/
@Slf4j
@Configuration
public class NativeAsyncTaskExecutePool implements AsyncConfigurer{
//注入配置类
@Autowired
TaskThreadPoolConfig config;
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//核心线程池大小
executor.setCorePoolSize(config.getCorePoolSize());
//最大线程数
executor.setMaxPoolSize(config.getMaxPoolSize());
//队列容量
executor.setQueueCapacity(config.getQueueCapacity());
//活跃时间
executor.setKeepAliveSeconds(config.getKeepAliveSeconds());
//线程名字前缀
executor.setThreadNamePrefix("MyExecutor-");
// setRejectedExecutionHandler:当pool已经达到max size的时候,如何处理新任务
// CallerRunsPolicy:不在新线程中执行任务,而是由调用者所在的线程来执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
/**
* 异步任务中异常处理
* @return
*/
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new AsyncUncaughtExceptionHandler() {
@Override
public void handleUncaughtException(Throwable arg0, Method arg1, Object... arg2) {
log.error("=========================="+arg0.getMessage()+"=======================", arg0);
log.error("exception method:"+arg1.getName());
}
};
}
}2.3 线程任务类AsyncTask .java@Component
public class AsyncTask {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
@Async
public void doTask2(int i) throws InterruptedException{
logger.info("Task2-Native"+i+" started.");
}
}2.4 测试@Test
public void AsyncTaskNativeTest() throws InterruptedException, ExecutionException {
for (int i = 0; i < 100; i++) {
asyncTask.doTask2(i);
}
logger.info("All tasks finished.");
}
2018-03-25 21:23:07.655 INFO 4668 --- [ MyExecutor-8] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native6 started.2018-03-25 21:23:07.655 INFO 4668 --- [ MyExecutor-3] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native1 started.2018-03-25 21:23:07.655 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native7 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native21 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native22 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native23 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native24 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native25 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native26 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native27 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native28 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native29 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native30 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native31 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native32 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native33 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native34 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native35 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native36 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native37 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native38 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native39 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native40 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native41 started.2018-03-25 21:23:07.657 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native42 started.2018-03-25 21:23:07.657 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native43 started.2018-03-25 21:23:07.657 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native44 started.2018-03-25 21:23:07.657 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native45 started.2018-03-25 21:23:07.657 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native46 started.2018-03-25 21:23:07.658 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native47 started.2018-03-25 21:23:07.655 INFO 4668 --- [ MyExecutor-7] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native5 started.2018-03-25 21:23:07.658 INFO 4668 --- [ MyExecutor-7] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native49 started.2018-03-25 21:23:07.658 INFO 4668 --- [ MyExecutor-7] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native50 started.2018-03-25 21:23:07.658 INFO 4668 --- [ MyExecutor-11] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native9 started.2018-03-25 21:23:07.655 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native4 started.2018-03-25 21:23:07.659 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native53 started.2018-03-25 21:23:07.659 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native54 started.2018-03-25 21:23:07.659 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native55 started.2018-03-25 21:23:07.659 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native56 started.2018-03-25 21:23:07.659 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native57 started.2018-03-25 21:23:07.659 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native58 started.2018-03-25 21:23:07.660 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native59 started.2018-03-25 21:23:07.660 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native60 started.2018-03-25 21:23:07.660 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native61 started.2018-03-25 21:23:07.660 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native62 started.2018-03-25 21:23:07.660 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native63 started.2018-03-25 21:23:07.660 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native64 started.2018-03-25 21:23:07.660 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native65 started.2018-03-25 21:23:07.660 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native66 started.2018-03-25 21:23:07.660 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native67 started.2018-03-25 21:23:07.660 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native68 started.2018-03-25 21:23:07.655 INFO 4668 --- [ MyExecutor-5] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native3 started.2018-03-25 21:23:07.655 INFO 4668 --- [ MyExecutor-4] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native2 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-8] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native19 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-2] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native0 started.2018-03-25 21:23:07.656 INFO 4668 --- [ MyExecutor-3] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native20 started.2018-03-25 21:23:07.657 INFO 4668 --- [ MyExecutor-10] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native8 started.2018-03-25 21:23:07.658 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native48 started.2018-03-25 21:23:07.658 INFO 4668 --- [ MyExecutor-7] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native51 started.2018-03-25 21:23:07.658 INFO 4668 --- [ MyExecutor-11] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native52 started.2018-03-25 21:23:07.658 INFO 4668 --- [ MyExecutor-12] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native10 started.2018-03-25 21:23:07.661 INFO 4668 --- [ MyExecutor-13] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native11 started.2018-03-25 21:23:07.662 INFO 4668 --- [ MyExecutor-14] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native12 started.2018-03-25 21:23:07.662 INFO 4668 --- [ MyExecutor-15] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native13 started.2018-03-25 21:23:07.663 INFO 4668 --- [ MyExecutor-16] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native14 started.2018-03-25 21:23:07.663 INFO 4668 --- [ MyExecutor-17] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native15 started.2018-03-25 21:23:07.663 INFO 4668 --- [ MyExecutor-18] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native16 started.2018-03-25 21:23:07.663 INFO 4668 --- [ MyExecutor-19] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native17 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-20] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native18 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-21] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native69 started.2018-03-25 21:23:07.664 INFO 4668 --- [ main] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native89 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-6] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native90 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-22] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native70 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-5] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native91 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-5] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native92 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-8] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native93 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-2] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native94 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-10] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native95 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-3] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native96 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-7] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native98 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-9] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native97 started.2018-03-25 21:23:07.664 INFO 4668 --- [ MyExecutor-11] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native99 started.2018-03-25 21:23:07.664 INFO 4668 --- [ main] com.laojiao.securitydemo.ControllerTest : All tasks finished.2018-03-25 21:23:07.666 INFO 4668 --- [ MyExecutor-23] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native71 started.2018-03-25 21:23:07.667 INFO 4668 --- [ MyExecutor-24] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native72 started.2018-03-25 21:23:07.667 INFO 4668 --- [ MyExecutor-25] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native73 started.2018-03-25 21:23:07.669 INFO 4668 --- [ MyExecutor-26] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native74 started.2018-03-25 21:23:07.669 INFO 4668 --- [ MyExecutor-27] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native75 started.2018-03-25 21:23:07.673 INFO 4668 --- [ MyExecutor-28] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native76 started.2018-03-25 21:23:07.674 INFO 4668 --- [ MyExecutor-29] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native77 started.2018-03-25 21:23:07.674 INFO 4668 --- [ MyExecutor-30] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native78 started.2018-03-25 21:23:07.676 INFO 4668 --- [ MyExecutor-31] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native79 started.2018-03-25 21:23:07.677 INFO 4668 --- [ MyExecutor-32] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native80 started.2018-03-25 21:23:07.677 INFO 4668 --- [ MyExecutor-33] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native81 started.2018-03-25 21:23:07.677 INFO 4668 --- [ MyExecutor-34] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native82 started.2018-03-25 21:23:07.678 INFO 4668 --- [ MyExecutor-35] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native83 started.2018-03-25 21:23:07.679 INFO 4668 --- [ MyExecutor-36] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native84 started.2018-03-25 21:23:07.679 INFO 4668 --- [ MyExecutor-37] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native85 started.2018-03-25 21:23:07.679 INFO 4668 --- [ MyExecutor-38] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native86 started.2018-03-25 21:23:07.680 INFO 4668 --- [ MyExecutor-39] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native87 started.2018-03-25 21:23:07.680 INFO 4668 --- [ MyExecutor-40] c.l.securitydemo.mythreadpool.AsyncTask : Task2-Native88 started.作者:PlayInJava
链接:https://juejin.cn/post/6844903584857849870
-
咳嗽
https://blog.mostion.com/archives/47/
2023-11-28T18:19:00+08:00
咳嗽是什么咳嗽是指肺失宣降,肺气上逆,发出咳声,或咳吐痰液的一种肺系病症为肺系疾病的主要症候之一就症状而论,有声无痰为咳,有痰无声为嗽。临床上往往痰声并见,难以截然分开,故以咳嗽并称。肺主呼吸肺主呼吸。是由宣发和肃降两个运动来完成的;肺气宣发,我们才能把身体的浊气排出去;肺气肃降,我们才能把吸入的清气下送至肾。肾纳气,也就是接纳清气。宣发主表,方向是向上向外;肃降主里,方向是向内向下。肺气宣发和肃降的运动协调有序,则呼吸均匀通畅。要是邪气犯肺,导致宣发和肃降功能失调,就会影响我们的气体交换,会出现胸闷,咳嗽,喘促,呼吸不利。外感咳嗽为六淫之邪,从口鼻或皮毛而入,侵袭肺系,或因吸入烟尘、异味气体,肺气被郁,肺失宣降。《河间六书》:“寒、暑、燥、湿、风、火六气,皆令人咳。张景岳:“六气皆令人咳,风寒为主。”风为六淫之首,其他外邪多随风邪侵袭人体,所以外感咳嗽常以风为先导,或夹寒,夹热,夹燥,表现为风寒、风热、风燥相合为病。内伤咳嗽由脏腑功能失调,内邪犯肺所致。或因饮食不调,嗜好烟酒,喜辛喜辣,灼伤胃阴:或因过食肥甘油腻,酿湿生痰:或因脾失健运,变生痰浊,痰邪上干;或因情志不遂,易怒伤肝,气机不畅,日久化火(肝咳,小柴胡,加味逍遥丸等,从肝治);肺部疾病,迁延不愈,肺气虚,内伤;咳嗽的病变主要是因为肺部机能失常引起的,但是与肝、脾、肾都有关系。但主要的病机就是肺气上逆。肺主气,司呼吸,上连气道、喉咙,开窍于鼻。同时肺又为娇脏,不耐寒热,易受内外之邪侵袭而致宣肃失职。外感咳嗽属于邪实,肺气上逆,雍滞不畅导致的。治疗时宜散邪宣肺。如果不及时治疗日久可能会出现转化,变为内伤咳嗽。内伤咳嗽的主要病理因素是“痰与火”。痰有寒和热的区别,而火有虚和实的不同。
-
Git 拉取远程分支代码并合并到本地分支
https://blog.mostion.com/archives/46/
2023-11-16T16:20:00+08:00
1. 使用git fetch命令需要在本地额外新建分支的 :// 查看远程
git remote -v
// 获取远程指定分支到本地临时新建的分支
// 获取远程master的分支的代码到临时新建的temp
git fetch origin master:temp
// 查看版本差异
// 查看temp分支与当前分支的差异
git diff temp
// 将临时分支temp合并到当前分支
git merge tmep
// 删除临时分支
git branch -D temp不要在本地新建分支的 :// 查看远程
git remote -v
// 获取远程分支到本地
// 获取远程的master分支
git fetch origin master
// 查看版本差异
// 查看远程master分支与本地master分支的差别
git log -p master..origin/master
// 合并到本地分支
git merge origin/master2.使用git pull命令相当于git fetch与git merge一起使用,但是这样使用容易出错所以推荐第一种方式// 查看远程
git remote -v
// 拉取并合并到本地分支
// 拉取远程的master分支合并到当前分支
git pull origin master
-
风寒感冒的症状和用药
https://blog.mostion.com/archives/44/
2023-11-16T12:25:00+08:00
风寒感冒就是病人受风寒而发生的感冒症见:恶寒,发热,无汗,头痛, 肢体酸疼,鼻塞声重,或鼻痒喷嚏,流清涕, 咽痒,咳痰稀薄色白,口不渴或喜热饮,舌苔薄白而润,脉浮或浮紧;治法:【辛温解表】推荐中成药【风寒感冒颗粒】组方:麻黄、葛根、桂枝、防风、紫苏叶、白芷、桔梗、苦杏仁、陈皮、干姜、甘草;与 感冒清热颗粒 组方相同功效:解表发汗,疏风散寒;用于风寒感冒,发热,头痛,恶寒,无汗,咳嗽,鼻寒,流清涕;【感冒清热颗粒】组方:麻黄、葛根、桂枝、防风、紫苏叶、白芷、桔梗、苦杏仁、陈皮、干姜、甘草;与 风寒感冒颗粒 组方相同功效:解表发汗,疏风散寒;用于风寒感冒,发热,头痛,恶寒,无汗,咳嗽,鼻寒,流清涕;【正柴胡饮颗粒】组方:柴胡、陈皮、防风、甘草、赤芍、生差;功效:表散风寒,解热止痛。用于外感风寒初起:发热恶寒,无汗,头痛,鼻寒,喷嚏,咽痒咳嗽,四肢酸痛;【感冒疏风片】组方:麻黄、桂枝、苦杏仁、白芍(酒炙)、防风、紫苏叶、独活、桔梗、谷芽(炒)、生姜(捣碎)、大枣(去核)、甘草;功效:辛温解表,宜肺和电;用于风寒感冒,发热咳嗽,头痛怕冷,鼻流清涕,骨节酸痛,四肢疲倦;【荆防颗粒】组方:荆芥、防风、羌活、独活、柴胡、前胡、川弯、积亮、获芝、桔梗、甘草;功效:发汗解表,散风祛湿。用于风寒感冒,头痛身痛,恶寒无汗,鼻寒清涕,咳嗽白痰;【九味羌活丸】组方:羌活、防风、苍术、细辛、川弯、地黄、白芷、黄梦、甘章;功效:解表,散寒,除湿;用于外感风寒挟湿导致的恶寒发热无汗,头痛且重,肢体酸痛;【四季感冒片】组方:桔梗,紫苏叶,陈皮,荆芥,大青叶,连翘,甘草(炙),防风;功效:清热解表;用于四季风寒感冒引起的发热头痛,鼻流清涕,咳嗽口干,咽喉疼痛,恶心厌食;【参苏片】组方:紫苏叶,葛根,前胡,党参,茯苓,陈皮,半夏(姜制),枳壳,桔梗等13味;功效:疏风散寒,祛痰止咳;用于体弱感冒风寒,恶寒发热,头痛鼻塞,咳嗽痰多,胸闷呕逆;【午时茶】组方:苍术,柴胡,羌活,防风,白芷,川芎,广藿香,前胡,连翘,陈皮,山楂,枳实,炒麦芽,甘草,桔梗,紫苏叶,厚朴,红茶,六神曲;功效:祛风解表,化湿和中;用于外感风寒,内伤食积证,症见恶寒发热,头痛身楚,胸脘满闷,恶心呕吐,腹痛腹泻;