Hi mọi người, mình đang tạo một jar library (EventService) cho các modules khác xài, trong library đó có các hàm như sau:
public class DatabaseConfig {
private String username;
private String password;
private int maximumPoolSize;
public DatabaseConfig(String username, String password, int maximumPoolSize) {
this.username = username;
this.password = password;
this.maximumPoolSize = maximumPoolSize;
}
public String getUsername() {
return username;
}
public void setUsername (String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword (String password) {
this.password = password;
}
public int getMaximumPoolSize() {
return maximumPoolSize;
}
public void setMaximumPoolSize (int maximumPoolSize) {
this.maximumPoolSize = maximumPoolSize;
}
}
public class DatabasePublisher {
private final DatabaseConfig databaseConfig;
private final String name;
private final String email;
public DatabasePublisher(DatabaseConfig databaseConfig, String name, String email) {
this.databaseConfig = databaseConfig;
this.name = name;
this.email = email;
}
public String getDatabaseConfig() {
return databaseConfig;
}
public void setDatabaseConfig (DatabaseConfig databaseConfig) {
this.databaseConfig = databaseConfig;
}
public String getName() {
return name;
}
public void setName (String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail (String email) {
this.email = email;
}
}
public class EventService {
private static final Logger log = LoggerFactory.getLogger(EventService.class);
private final DatabasePublisher databasePublisher;
private final String eventName;
private final int totalMessage;
public EventService(DatabasePublisher databasePublisher, String eventName, int totalMessage) {
this.databasePublisher = databasePublisher;
this.eventName = eventName;
this.totalMessage = totalMessage;
}
public void handleEvent() {
//TO DO
}
}
Giả sử mình có 2 modules xài cái cục jar này là ReceiveEventMessage1 và ReceiveEventMessage2.
Mình chỉ muốn thằng ReceiveEventMessage1 sử dụng DatabasePublisher của cái jar lib trên, còn thằng ReceiveEventMessage2 thì không thêm thắt gì cái DatabasePublisher bean trên đó cả. Vì đã tạo cái DatabasePublisher bean cho ReceiveEventMessage1 nên lúc run nó chạy bình thường. Nhưng bên thằng ReceiveEventMessage2 thì spring boot nó báo lỗi sau do không create bean cho nó:
Parameter 5 of constructor in com.eventApp.EventService required a bean of type 'com.eventApp.DatabasePublisher' that could not be found.
Action:
Consider defining a bean of type 'com.eventApp.DatabasePublisher' in your configuration.
Expect case của mình là chỉ sửa code trong thằng EventService jar sao cho cái bean trên optional thôi, thằng ReceiveEventMessage1 muốn xài thì khai báo bean để xài, còn thằng ReceiveEventMessage2 không chỉnh sửa gì code vẫn bỏ qua cái bean để chạy.
Mình có thử dùng @Lazy với @ConditionalOnProperty nhưng vẫn không có fix được.
Bạn nào biết cách có thể giúp mình được không?
Thanks.