Spring bean init-method中使用ibatis访问数据库

大侠联盟 2016-12-30 10:31:43
我现在有一个java web项目,其中使用到了socket服务,我在spring中配置了这个socket所在类,并将init-method配置为socket服务启动的方法。下面是我spring bean的 配置:
<bean id="socketServlet" parent="transactionProxy" lazy-init="true">
<property name="target">
<bean class="xxx.xxx.xxx.SocketServlet" init-method="init">
<property name="myService" ref="myService"></property>
</bean>
</property>
</bean>
我想在socketServlet 的init方法中访问数据库,使用了另一个bean: myService, 在myService中访问了数据库,项目使用的是ibatis框架,经过调试发现,myService已经成功注入了,但是调用myService方法访问数据库的时候报错,下面是主要报错信息:
nested exception is com.ibatis.sqlmap.client.SqlMapException: There is no statement named basic.queryXXX in this SqlMap.

请问各位高手,我这种方式是否能实现?如果可以,哪里出了问题?
...全文
237 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
JE_GE 2017-01-08
  • 打赏
  • 举报
回复
package com.jege.spring.boot.controller; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; import com.jege.spring.boot.data.jpa.entity.User; import com.jege.spring.boot.data.jpa.repository.UserRepository; /** * @author JE哥 * @email 1272434821@qq.com * @description:spring的事件监听器的处理机制:在启动服务器的时候,插入默认数据 */ @Component public class InitApplicationListener implements ApplicationListener<ContextRefreshedEvent> { @Override public void onApplicationEvent(ContextRefreshedEvent event) { ApplicationContext context = event.getApplicationContext(); UserRepository userRepository = context.getBean("userRepository", UserRepository.class); for (int i = 1; i < 21; i++) { User user = new User("user" + i, 25 + i); userRepository.save(user); } } }
大侠联盟 2016-12-30
  • 打赏
  • 举报
回复
各位大神给点建议呀,谢谢
  • 打赏
  • 举报
回复
一、关于Servelt启动正确性问题。 首先,你这个类根本不是Servlet,只是取名而已;而Servlet的init方法不是由你来调用的;这个是JAVAEE生命周期的事情;你需要一个代理,让你的Servlet可以被Spring管理起来;之后,你才可以正式注入Service进Servlet中;如下: 1、先把自定义的Servlet对象加入到Spring配置中。 <bean class="xxx.xxx.xxx.SocketServlet" id="SocketServlet"> <property name="myService" ref="myService"></property> </bean> 2、利用Spring的DelegatingFilterProxy机制模仿一个DelegatingServletProxy出来,并配置进web.xml中。 DelegatingServletProxy这个类从这里获取:https://github.com/jayway/forest/blob/master/core/src/main/java/com/jayway/forest/di/spring/DelegatingServletProxy.java <servlet> <servlet-name>SocketServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>targetBean</param-name> <!-- 注意:这里就是你Spring配置里的Servlet对象ID名 --> <param-value>SocketServlet</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SocketServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> PS:以上代码我并没有测试过,但是思路肯定是这样的;如果有问题咱们再一一解决。 二、Mybatis数据库查询问题。 至于你贴出来的异常就是你配置的Mybatis查询配置找不到,你可以先单元测试通过后再联调。

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧