gpt4 book ai didi

java - 需要属性 'dataSource' java 中的错误(Spring)

转载 作者:行者123 更新时间:2023-12-02 19:38:27 25 4
gpt4 key购买 nike

我正在使用 Java (Spring) 开发 Web 应用程序

我的java文件是,

try
{
JdbcTemplate jt = new JdbcTemplate(dataSource);

System.out.println("Connection ....."+jt.toString());

Connection conn;
Statement st;
conn =DriverManager.getConnection(jt.toString());
conn = (Connection) jt.getDataSource();
st=conn.createStatement();
System.out.println("Connection created....."+st);
}
catch (Exception e) {
System.out.println("Error Found...."+ e.getMessage());
System.out.println("Strack Trace....."+e.getStackTrace());
}

我的spring-servlet.xml文件是,

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/cjbranchdb" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource"><ref bean="dataSource"/></property>
</bean>

但是它得到一个错误,

Error Found: Property 'dataSource' is required.
Strack Trace: [Ljava.lang.StackTraceElement;@7948dd

在这里,我想在 Java 文件中建立连接并将其传递给另一个变量作为 Jasper Report。

请帮忙,如何解决这个问题?

最佳答案

我猜您对 Java、JEE、Spring 和 JDBC 完全陌生。正如我在评论中所说,如果你在那里所做的事情的基础是不正确的,那么很难回答你的问题。我将尝试讨论几个主题,希望也能指出您当前的问题所在。

Spring应用程序结构

您需要确保正确构建您的项目:

  • src
    • main
      • java - Java 源代码目录
        • in/mmali/springtest/controller/IndexController.java - 你的 Controller 类
      • resources - 非 Java(重新)源目录
      • webapp - Web 应用程序资源的根目录
        • WEB-INF/web.xml - JEE Web应用程序配置
        • WEB-INF/spring-servlet.xml - 调度程序 servlet 的应用程序上下文配置
  • pom.xml - Maven 配置(如果您使用 Maven)

我将其称为 Java 项目的通用结构,主要由 Maven“标准化”。

正确的 JEE 配置

您需要有正确的web.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

</web-app>

这是一个基本配置(没有根上下文),它将使用您的 spring-servlet.xml作为 Spring 上下文配置。

正确的 Spring 配置

您需要有正确的 Spring 上下文配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:annotation-driven />
<mvc:resources location="/resources/" mapping="/resources/**" />

<!-- With ROOT context we would restrict component scan on controllers here -->
<context:component-scan base-package="in.mmali.springtest" />

<!-- Data source configuration would normally go inside ROOT context. -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/cjbranchdb" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>

这将加载所有用@Component注释的类(及其同伴 @Controller@Service@Repository )作为您的 bean 。 Spring应用程序上下文中的Bean是由Spring管理的对象 -> 即由Spring本身实例化的对象。当您想要使用 Spring bean 时,您需要将其注入(inject)(例如,通过使用 @Autowired 注释),或者需要将其从 ApplicationContext#getBean 中取出。手动。

使用 JDBC

使用 JDBC 会因为所有可关闭资源和检查异常而感到痛苦。这就是 Spring-JDBC 项目包装 JDBC API 的原因,这样您就不必使用它。

为了展示如何使用 JDBC 以及如何让 Spring 注入(inject)依赖项,这里有一个简单的 Controller :

@Controller // Will be detected by <context:component-scan>
@RequestMapping // Will be detected by <mvc:annotation-driven> (more specifically by one of its component - RequestMappingHandlerMapping)
public class IndexController {

@Autowired // Spring will inject JdbcTemplate here
private JdbcOperations jdbcOperations;

@RequestMapping // This method should be called for requests to "/"
@ResponseBody // Returned string will be returned to client... normally you would register view resolver and just return name of a JSP to render
public String renderIndex() {
// You don't need to worry about JDBC's DataSource, Connection, ResultSet, ... just use JdbcTemplate
long rowCount = jdbcOperations.queryForLong("SELECT COUNT(*) FROM my_test_table;");
return "Number of rows in database is: " + String.valueOf(rowCount);
}

}

请注意,在真实的应用程序中,您不会允许 Controller 直接使用您的数据源,而是通过服务和数据层。

后续步骤

  • 开始使用日志系统并且永远不要使用System.out.println再次在网络应用程序中;)。我建议使用 slf4j 的简单绑定(bind)来启动(稍后您可以将其配置为使用 logback 或 log4j)。
  • 配置您的应用程序以使用事务。使用 Spring 的事务处理( <tx:annotation-driven/>@Transactional )。一开始它可能看起来很神奇,但是当您发现一些有关 AOP 和代理类的内容时,您就会开始真正欣赏 Spring 的工作原理。
  • 将应用程序逻辑拆分到服务层和数据 (DAO) 层。
  • 检查 Spring 的示例应用程序 ( http://docs.spring.io/docs/petclinic.html ) 和引用应用程序 ( https://github.com/spring-projects/greenhouse )。

关于java - 需要属性 'dataSource' java 中的错误(Spring),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21671627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com