Я развертываю файл war в пробной версии SAP Neo и привязываюсь к экземпляру базы данных Hana. Я могу получить источник данных в NeoConfig
классе, но в инъекции зависимостей источника данных контроллера он не работает, объект пуст.
@Configuration
public class NeoConfig {
DataSource ds = null;
private static final Logger log = LoggerFactory.getLogger(NeoConfig.class);
@Bean(destroyMethod = "")
public DataSource jndiDataSource() throws IllegalArgumentException, NamingException, SQLException {
JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
// InitialContext ctx = new InitialContext();
DataSource ds = dataSourceLookup.getDataSource("java:comp/env/jdbc/DefaultDB");
// ds = (DataSource) ctx.lookup("java:comp/env/jdbc/DefaultDB");
DBInformation dbInfo = new DBInformation(ds.getConnection().getMetaData());
log.info(dbInfo.toString());
return ds;
}
}
Контроллер:
@RestController
@RequestMapping("/")
public class HomeController {
private static final Logger log = LoggerFactory.getLogger(HomeController.class);
String returnMessage = null;
@Autowired
DataSource dataSource;
// @Autowired ApplicationInstanceInfo instanceInfo;
@GetMapping("/hello")
public String home(Model model) {
Map<Class<?>, String> services = new LinkedHashMap<Class<?>, String>();
if (dataSource != null) {
services.put(dataSource.getClass(), toString(dataSource));
model.addAttribute("services", services.entrySet());
returnMessage = "Datasource";
} else {
returnMessage = "NoBinding";
}
Application.properties:
server.contextPath=/
spring.autoconfigure.exclude=DataSourceAutoConfiguration.class
Context.xml
<Resource name="jdbc/DefaultDB"
auth="Container"
type="javax.sql.DataSource"
factory="com.sap.jpaas.service.persistence.core.JNDIDataSourceFactory"/>