关于Springboot的EventListener和Jasypt使用 小结

本文介绍了Spring中的EventListener如何实现事件驱动编程,通过一个简单的例子展示了事件发布和监听的配置。同时,详细讲解了Jasypt在Spring Boot中用于加密配置的使用场景,包括添加依赖、生成秘钥、配置加密属性以及启动类的设置,确保应用能够正常启动。

目录

 

1. EventListener

1.1 使用场景

1.2 配置

1.3 测试

2. Jasypt

2.1 使用场景

2.2 配置

2.3 测试


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

在 Spring Boot 中,**事件机制(Event)** 是一种基于观察者模式实现的组件间通信方式,适用于解耦业务逻辑。Spring 提供了内置的事件发布与监听机制,主要包括以下几个核心类: - `ApplicationEvent`:事件对象,继承此类定义自定义事件。 - `ApplicationListener` 或 `@EventListener`:监听器,用于监听特定事件。 - `ApplicationEventPublisher`:事件发布者,用于发布事件。 --- ### ✅ 使用步骤 #### 1. 定义事件类 ```java public class MyCustomEvent extends ApplicationEvent { private String message; public MyCustomEvent(Object source, String message) { super(source); this.message = message; } public String getMessage() { return message; } } ``` #### 2. 发布事件 通过注入 `ApplicationEventPublisher` 来发布事件: ```java @Component public class MyEventPublisher { @Autowired private ApplicationEventPublisher eventPublisher; public void publishEvent(String message) { System.out.println("Publishing event..."); eventPublisher.publishEvent(new MyCustomEvent(this, message)); } } ``` #### 3. 监听事件 使用 `@EventListener` 注解监听事件: ```java @Component public class MyEventListener { @EventListener public void handleMyCustomEvent(MyCustomEvent event) { System.out.println("Received event with message: " + event.getMessage()); } } ``` --- ### 🔁 同步 vs 异步事件 默认情况下,Spring 的事件是同步的。如果需要异步处理,可以结合 `@Async`: #### 启用异步支持: ```java @Configuration @EnableAsync public class AsyncConfig { } ``` #### 修改监听器: ```java @EventListener @Async public void handleMyCustomEventAsync(MyCustomEvent event) { System.out.println("Async handling event: " + event.getMessage()); } ``` --- ### 📌 内置事件示例 Spring Boot 提供了一些内置事件,如: - `ApplicationStartingEvent`:在应用启动时触发。 - `ApplicationReadyEvent`:在应用启动完成后触发。 - `ApplicationFailedEvent`:在启动失败时触发。 你可以监听这些事件来执行初始化或清理逻辑。 --- ### 示例代码调用 ```java @RestController public class EventController { @Autowired private MyEventPublisher publisher; @GetMapping("/publish") public String publish() { publisher.publishEvent("Hello Spring Event"); return "Event published!"; } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值