У меня есть простая REST-служба jax-rs, которая развернута как WAR на сервере wildfly и использует поиск JNDI для источника данных, настроенного в standalone.xml. Для этого путь читается из файла datasource.properties. Затем служба выполняет действия базы данных через этот источник данных.
Теперь я хочу использовать этот REST-сервис в приложении SpringBoot, которое развернуто на встроенном коте. Моя реализация использует RESTEasy, и сервис может быть легко интегрирован с resteasy-spring-boot-starter. Но поиск JNDI не работает, потому что, конечно, источник данных теперь настроен не в standalone.xml, а в файле application.properties. Это совершенно другой источник данных.
Я ищу решение для установки источника данных без необходимости его "жесткого кодирования". Вот как соединение извлекается в настоящее время в WAR для wildfly:
private Connection getConnection() {
Connection connection = null;
try (InputStream config = OutboxRestServiceJbossImpl.class.getClassLoader().getResourceAsStream("application.properties")) {
Properties properties = new Properties();
properties.load(config);
DataSource ds = (DataSource) new InitialContext().lookup(properties.getProperty("datasource"));
connection = ds.getConnection();
} catch (Exception e) {
}
return connection;
}
В настоящее время я решил эту проблему, имея основной модуль, который фактически выполняет логику, и 2 реализации с jax-rs для wildfly и SpringMVC вSpringBoot. Они вызывают методы экземпляра основного модуля, и соединение передается этим методам. Для wildfly это выглядит так:
public String getHelloWorld() {
RestServiceCoreImpl rsc = new RestServiceCoreImpl();
try (Connection connection = getConnection()) {
String helloWorld = rsc.getHelloWorld(connection);
} catch (Exception e) {
}
return helloWorld;
}
public String getHelloWorld(Connection connection){
//database stuff, eg. connection.execute(SQL);
}
И так в SpringBoot:
@Autowired
RestServiceCoreImpl rsc;
@Autowired
DataSource restServiceDataSource;
@Override
public String getHelloWorld() {
try (Connection connection = restServiceDataSource.getConnection()){
return rsc.getHelloWorld(connection);
} catch (SQLException e) {
}
return null;
}
Есть ли способ решить эту проблему с источником данных? Мне нужно, чтобы решение SpringMVC было заменено решением jax-rs в SpringBoot.