Я занимаюсь разработкой проекта в Spring Boot и Spring Data, я хочу использовать JNDI с удаленного сервера WebLogic.
У меня есть старый пример, который не использует Spring, он делает это следующим образом:
DataSource pool = null; Hashtable ht = null;
ht = new Hashtable( );
ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,"t3://192.151.120.180:7003,192.151.121.180:7005");
ht.put(weblogic.jndi.WLContext.ENABLE_SERVER_AFFINITY, "true");
env = new InitialContext(ht);
pool = (DataSource) env.lookup("jdbc.conPesos");
Я хочу сделать то же соединение, но из application.property
файла (или application.yml
файла) с Spring Boot.
Это мой код:
spring:
datasource:
driver-class-name: oracle.jdbc.OracleDriver
url: t3://192.151.120.180:7003
jndi-name: java:/comp/env/jdbc/conPesos
Я получил ошибку:
Ошибка создания компонента с именем 'dataSource', определенным в ресурсе пути к классу [----]: Не удалось создать экземпляр компонента с помощью метода фабрики;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [javax.sql.DataSource]: фабричный метод 'dataSource' вызвал исключение;вложенное исключение: org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException: не удалось найти JNDI DataSource с именем 'java: / comp / env / jdbc / conPesos';вложенным исключением является javax.naming.NoInitialContextException: необходимо указать имя класса в свойстве среды или системы, либо в качестве параметра апплета, либо в файле ресурсов приложения: java.naming.factory.initial
КомуЧтобы исправить ошибку, я создал класс @configuration
со следующим кодом:
@Bean public DataSource dataSource() throws NamingException {
Context ctx ;
DataSource dataSource;
Hashtable<String, String> ht;
NamedParameterJdbcTemplate np;
ht = new Hashtable<>();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://192.151.120.180:7003");
ht.put(weblogic.jndi.WLContext.ENABLE_SERVER_AFFINITY, "true");
ctx = new InitialContext(ht);
dataSource=(DataSource) ctx.lookup("jdbc.conPesos");
return dataSource; }
Также мне пришлось написать SpringBootApplication(exclude = JmxAutoConfiguration.class)
в основном классе.Это работает нормально, однако я хотел бы сделать это из файла application.property
, но я не знаю, как я могу добавить свойство INITIAL_CONTEXT_FACTORY в этот файл.
Кто-то знает это?