Следуя справочным руководствам Spring Boot, я настроил пример Hello World. На моем рабочем месте используется Ant, поэтому я внедрил build.xml
на основе https://www.mkyong.com/ant/ant-spring-mvc-and-war-file-example/ Результирующий WAR-файл корректно работает при развертывании на сервере WebLogic 12c. Примечание. В соответствии с этим руководством файлы .properties
копируются в ${web.classes.dir}
.Как запросить Oracle SQL с Spring Boot WAR?
Теперь я хочу запросить базу данных Oracle SQL Oracle через JNDI. После различных частей Spring ботинка ссылки & руководства, это мой модифицированный код в настоящее время:
@SpringBootApplication
public class Application extends SpringBootServletInitializer implements WebApplicationInitializer {
@Autowired
private static JdbcTemplate jdbcTemplate;
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
public static void update(String query) {
jdbcTemplate.update(query);
}
}
@RestController
@RequestMapping("/query")
public class CrudController {
@RequestMapping(value="/update", method=RequestMethod.GET)
public String update(@PathVariable String tableName, /* other params */) {
// Generates query from params
Application.update(query);
return query;
}
}
Я также добавил application.properties
файл, который содержит одну строку, в соответствии с Весенним справочником:
spring.datasource.jndi-name=jndiName
На данный момент WAR может развертываться на сервере, но когда я перехожу на http://ipaddr:port/appName/query/update?params
, я получаю NullPointerException
. Я отдельно подтвердил, что update()
правильно генерирует SQL-запрос с допустимым синтаксисом, поэтому я подозреваю, что неправильно настроил конфигурацию базы данных.
Каков правильный способ подключения к базе данных JNDI и выполнения запроса?
Edit:
После обновления моего кода в соответствии с ответом Strelok, я попытался запустить обновленный файл WAR на сервере WebLogic, который впоследствии бросает следующее исключение:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'crudController': Injection of autowired dependencies failed; ...
...
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.jdbc.core.JdbcTemplate main.java.controllers.CrudController.jdbcTemplate; ...
...
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.jdbc.core.JdbcTemplate] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Я пытался модифицируя аннотацию @Autowired
до @Autowired(required=true)
, но это ничего не изменило. Как я могу это решить?
автоматического связывания не работает на 'static' полей. Также вы не должны использовать статические методы для вызова/реализации функций. –