我試圖在Spring Boot 1.1.6 web項目中將數據源從c3p0切換到Tomcat JNDI。我在GitHub中找到了一個示例應用程序,它在從@RestController
帶註釋的類訪問DataSource實例時工作正常。Spring Boot - Tomcat JNDI在服務bean中失敗
@RestController
public class TestController {
@Autowired
private DataSource dataSource;
@RequestMapping("/test")
@ResponseBody
public String test() {
// Gets object instance... everything is OK...
System.out.println(this.dataSource);
}
然而,當我嘗試注入相同的數據源@Service
註釋豆,我儘快得到javax.naming.NameNotFoundException
作爲實例在代碼中使用。
@Service
public class TestService {
@Autowired
private DataSource dataSource;
@PostConstruct
private void init() {
// Throws exception...
System.out.println(this.dataSource);
}
堆棧跟蹤:
Caused by: javax.naming.NameNotFoundException: Name [java:comp/env/jdbc/myDataSource] is not bound in this Context. Unable to find [java:comp].
at org.apache.naming.NamingContext.lookup(NamingContext.java:819)
at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155)
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:179)
at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:106)
at org.springframework.jndi.JndiObjectTargetSource.getTarget(JndiObjectTargetSource.java:135)
... 11 more
我不知道爲什麼JNDI數據源豆不能從@服務類訪問?有任何想法嗎 ?
你是怎麼指定容器拿起@Service註釋的? – mreiterer 2014-10-09 12:12:18
當應用程序上下文啓動時,它會被篡改一次。 – 2014-10-09 12:35:45
你確定DI容器拿起它嗎?你在使用組件掃描嗎? – mreiterer 2014-10-09 12:37:52