2016-12-21 3 views
0

Я работаю над приложением Spring MVC. Я получаю следующее исключение, когда я пытаюсь запустить приложение:java.lang.IllegalArgumentException: Требуется свойство 'dataSource'

java.lang.IllegalArgumentException: Property 'dataSource' is required 

Я пытался следовать другие должности в stackverflow и реализованного на основе commnets, но ничего не зафиксировал проблему. Вы можете найти файлы, указанные ниже:

Servlet-context.xml

<beans:bean id="SearchResultsServiceDAOImpl" class="com.easyFinder.app.ServiceDAOImpl.SearchResultsServiceDAOImpl"> 
      <beans:property name="dataSource" ref="dataSource" />  
</beans:bean> 

<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <beans:property name="driverClassName" value="oracle.jdbc.OracleDriver"/> 
    <beans:property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"/> 
    <beans:property name="username" value="sysman"/> 
    <beans:property name="password" value="orcl"/> 
</beans:bean> 

SearchresultsServiceDAOImpl.java

private DataSource dataSource; 
public void setDataSource(DataSource dataSource) { 
    this.dataSource = dataSource; 
} 

public String enterIntoNewEntrytable(Date date, String message) { 
    JdbcTemplate jdbcTemplate = new JdbcTemplate(); 
    List args = new ArrayList(); 
    String query = "INSERT INTO NEW_ENTRY VALUES ('1',?,?)"; 
    jdbcTemplate = new JdbcTemplate(dataSource); 
    args.add(date); 
    args.add(message); 
    jdbcTemplate.update(query,args); 
    return null; 
} 

StackTrace:

SEVERE: Servlet.service() for servlet [appServlet] in context with path [/app] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: Property 'dataSource' is required] with root cause 
java.lang.IllegalArgumentException: Property 'dataSource' is required 
    at org.springframework.jdbc.support.JdbcAccessor.afterPropertiesSet(JdbcAccessor.java:135) 
    at org.springframework.jdbc.core.JdbcTemplate.<init>(JdbcTemplate.java:168) 
    at com.easyFinder.app.ServiceDAOImpl.SearchResultsServiceDAOImpl.enterIntoNewEntrytable(SearchResultsServiceDAOImpl.java:28) 
    at com.easyFinder.app.SearchActionController.home(SearchActionController.java:32) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

Пожалуйста, помогите мне найти решение.

ответ

0

Вам нужно

<beans:bean id="searchResultsServiceDAO" class="com.easyFinder.app.ServiceDAOImpl.SearchResultsServiceDAOImpl"> 
    <beans:property name="dataSource" ref="dataSource" />  
</beans:bean> 

Интерфейс

public interface SearchresultsServiceDAO { 
    public String enterIntoNewEntrytable(Date date, String message); 
} 

Тогда

public class SearchresultsServiceDAOImpl 
    implements SearchresultsServiceDAO { 

    private DataSource dataSource; 

    public void setDataSource(DataSource dataSource) { 
     this.dataSource = dataSource; 
    } 

    public String enterIntoNewEntrytable(Date date, String message) { 
     //Then you can use 
     Connection conn = dataSource.getConnection(); 
     // ... 
     return null; 
    } 

} 

, если вы хотите, чтобы ввести источник данных в JdbcTemplate использования

<beans:bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <beans:property name="dataSource" ref="dataSource" /> 
</beans:bean> 

и использовать его таким образом

@Autowired 
JdbcTemplate jdbcTemplate; 

Вы также, возможно, потребуется <context:annotation-config/> в зависимости от конфигурации

0

Вы должны использовать interface определения в конфигурации вместо implementation.

Вы в настоящее время определены, который относится к реализации,

<beans:bean id="SearchResultsServiceDAOImpl" class="com.easyFinder.app.ServiceDAOImpl.SearchResultsServiceDAOImpl"> 
      <beans:property name="dataSource" ref="dataSource" />  
</beans:bean> 

Вместо обновления тоже (Пожалуйста, проверьте путь),

<beans:bean id="searchResultsServiceDAO" class="com.easyFinder.app.ServiceDAO.SearchResultsServiceDAO"> 
    <beans:property name="dataSource" ref="dataSource" />  
</beans:bean> 

Я вижу, что вы использовали constructor инъекции. Но вы можете использовать подход на основе аннотации к inject бобам, потому что это устранит требование передать dataSource в каждом из конструкторов DAO.

Проверить на наличие @Autowired документации.

@Autowired 
DataSource dataSource; 
0

Убедитесь, что DataSource и JdbcTemplate инициализируются и что getJdbcTemplate определяется в потоке данных (в любом месте, но должно быть сделано). Ниже приведен пример:

@Autowired 
protected DataSource dataSource; 

/** Spring JDBC helper. */ 
public JdbcTemplate jdbcTemplate; 

/** 
* Gets the jdbc template. Instantiates on first call. 
* 
* @return the jdbc template 
*/ 
public JdbcTemplate getJdbcTemplate() { 
    if (null == jdbcTemplate) { 
     jdbcTemplate = new JdbcTemplate(dataSource); 
    } 
    return jdbcTemplate; 
} 

я получил то же исключение, когда я назвал класс осущ непосредственно, но они были начаты в базовом классе.

Смежные вопросы