我有服务:
@Service
public class MessageServiceImpl implements MessageService {
private final MessageRepository smevMessageRepository;
private final Environment environment;
public MessageServiceImpl(MessageRepository messageRepository, Environment environment) {
this.messageRepository= messageRepository;
this.environment = environment;
}
@Override
public List<Message> findReadyToSend() {
if (environment.acceptsProfiles("postgre")) {
return messageRepository.findReadyToSendPostgre();
}
return messageRepository.findReadyToSendOracle();
}
这是我的存储库:
@Repository
public interface MessageRepository extends JpaRepository<Message, String> {
@Query(value = "select sm.* from MESSAGES sm ...", nativeQuery = true)
List<Message> findReadyToSendOracle();
@Query(value = "select sm.* from MESSAGES sm ...", nativeQuery = true)
List<Message> findReadyToSendPostgre();
oracle profile
如果我用我调用findReadyToSendOracle
方法和 if postgre profile
-方法启动 spring boot 服务器findReadyToSendPostgre
。这行得通。但是这个解决方案很糟糕。我认为。因为我为配置文件检查编写硬代码。我的存储库有 2 种用于不同数据库的方法。
如何正确实施?