目录
1. EventListener
1.1 使用场景
EventListener是一种事件驱动编程,这是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式;为的就是业务系统逻辑的解耦,提高可扩展性以及可维护性。
事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已,用过Kafka的同学应该很容易理解这个。
1.2 配置
1) 新建UserInfoEvent。
public class UserInfoEvent extends ApplicationEvent {
private String data;
public UserInfoEvent(Object source, String data) {
super(source);
this.data = data;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
2) 新建一个UserInfoListener。
@Component
public class UserInfoListener {
@EventListener
public void handleDemoEvent(UserInfoEvent event) {
System.out.println("UserInfoEvent: "+ event.getData());
}
}
3) 通过ConfigurableApplicationContext来publish event。
public class SpringbootApplication {
public static void main( String[] args )
{
ConfigurableApplicationContext context = SpringApplication.run(SpringbootApplication.class, args);
context.publishEvent(new UserInfoEvent(context, "test"));
}
}
1.3 测试
2. Jasypt
2.1 使用场景
Jasypt用于application.properties里秘钥加密配置,可以很简便地加密明文密码。
2.2 配置
1) 添加pom依赖。
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
2) 新建一个CodeGeneratorUtil生成秘钥。
public class CodeGeneratorUtil {
public static void main(String[] args) {
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword("bas");
String userName = textEncryptor.encrypt("root");
String passWord = textEncryptor.encrypt("123456");
System.out.println("userName:" + userName);
System.out.println("passWord:" + passWord);
}
}
如图,加密后password是EXb/xCyjqcTuBV6r/Csb8A==
3) application.properties加上下面的配置。
jasypt.encryptor.password=bas
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator
spring.datasource.password=ENC(EXb/xCyjqcTuBV6r/Csb8A==)
注:ENC()里面的code就是加密后的秘钥。
4) 启动类加上配置@EnableEncryptableProperties。
2.3 测试
通过上一步的配置能够正常启动app就说明加密成功了。
附:
1) 关于Jasypt的解密和其他用法可以参考:jasypt-spring-boot-starter实现加解密和数据返显
2) 如果需要源码可以访问:BAStriver / springboot-test