之前做过elk收集springboot日志,但是elk太重了,现在换成轻量级的logstash+doris。
解决maven依赖问题
起因
由于项目比较老,下载下来以后,发现maven依赖好多找不到了。找同事要了包,放到了对应的本地仓库目录下还是不行。
报错信息如下
1 | Could not find artifact com.github.everit-org.json-schema:org.everit.json.schema:pom:1.11.1 in aliyunmaven (https://maven.aliyun.com/repository/public) |
解决办法
- 删除本地仓库中的包
- 使用命令将依赖安装到本地仓库
1
2mvn install:install-file -Dfile=path/to/your/jar/file.jar -DgroupId=com.github.everit-org.json-schema -DartifactId=org.everit.json.schema -Dversion=1.11.1 -Dpackaging=jar
- 打开idea刷新mavne依赖,发现已经正常了
ubuntu格式化硬盘并挂载
1 | sudo fdisk -l |
选择n新建分区,选择p主分区,选择1,回车确认默认起始扇区,回车确认默认结束扇区,输入+200G,回车确认格式化,输入w保存并退出。
1 | Welcome to fdisk (util-linux 2.34). |
将分区进行格式化
1 | sudo mkfs.ext4 /dev/vdb1 |
创建挂载目录,并将分区挂载到目录
1 | sudo mkdir /mnt/vdb |
上面挂载是临时的,重启后会失效,需要修改fstab文件,开启自动挂载
1 | echo '/dev/vdb1 /mnt/vdb ext4 defaults 0 0' | sudo tee -a /etc/fstab |
SpringBoot注入静态属性或静态对象
springboot中注入对象很方便,但是如果类是个工具类,里面的静态方法,只能使用静态属性。这时候就要想办法让静态属性可以被注入。
重点有两点
- 让spring接管类,可以使用@Component、@Service等注解
- 使用setter或@PostConstruct,将属性注入
mysql log迁移
记录一次mysql log迁移经理
系统:Ubuntu18.04.6
mysql版本:mysql5.7
停止mysql服务
1 | systemctl stop mysql.service |
复制文件到新目录
1 | sudo mkdir /data/log/mysql |
修改配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
,找到log的相关的配置修改目录
1 | log_error = /data/log/mysql/error.log |
修改启动文件/etc/apparmor.d/usr.sbin.mysqld
添加以下配置
1 | /data/log/mysql.err rw, |
重启服务
1 | systemctl restart apparmor |
springboot整合jasypt加密数据库配置
项目中会遇到数据库名称和密码需要加密防止泄露的需求,因此引入了jasypt。下面的例子是将jasypt的加密密钥写在了配置文件中,为了安全,实际引用时,需要将配置放到服务器的启动命令中,避免在代码中暴露密钥
1.引入maven依赖jasypt-spring-boot-starter
1 | <dependency> |
2.启动类添加注解@EnableEncryptableProperties
1 | import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; |
jar包运行参数配置
三种jar包启动时传参的方式
jvm传值 -Dkey_name=value
这种方式已-D
开头,放在jar包之前1
java -Ddatabasename=test -jar test.jar
给main函数传值 key_name=value
1
java -jar test.jar databasename=test
治理要求参数放在jar包之后,main方法中可以接收参数
1
2
3
4
5public static void main(String[] args) throws IOException {
for(String arg : args){
log.info("参数:" + arg);
}
}覆盖yaml或properties 文件参数 –key_name=value
1
java -jar tes.jar --logName=log.txt
这里要求参数放在jar包之后用
--
开头,程序中可以使用@Value
注解获取参数值1
2@Value("${logName}")
private String logName; //输出:log.txt
jar包运行参数配置
三种jar包启动时传参的方式
设置时区
1
sudo timedatectl set-timezone "Asia/Shanghai"
配置java环境
配置dns
1
vi /etc/systemd/resolved.conf
mysql root用户增加超级权限,解决无法给新建用户配置权限问题
mysql root用户通过外网登录数据库后,想要添加用户分配权限,结果发现不行。但是在服务器上通过localhost登录后可以配置。
原因是新增的root@%
没有超级权限。只有个root@localhost
才有。
解决方法是,使用root@localhost
账户为root@%
添加超级权限。
在服务器上使用mysql -u root -p
登录,然后执行以下命令
1 | UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root'; |
这是通过mysql客户端工具,使用外网链接数据库就可以设置用户权限了
spring官方建议不要使用@Autowired,完美解决方案
Springboot官方建议使用final来修饰成员变量,然后通过构造方法来进行注入。原因:final修饰的成员变量是不能够被修改的,反射除外。
既然不推荐使用Autowired了,应该如何修改我们的代码呢?