我有一个Spring项目,用于在Intellij IDEA中设置的小型Web应用程序.
它在Hibernate之上使用JPA作为持久层.数据源(MySQL)在Spring应用程序上下文中定义:
<!-- Values are configured via the property override -->
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value=""/>
<property name="url" value=""/>
<property name="username" value=""/>
<property name="password" value=""/>
</bean>
Run Code Online (Sandbox Code Playgroud)
实际值从属性文件中读取,并在Spring运行时使用属性覆盖机制注入.
然后将数据源注入到同一应用程序上下文中的实体管理器工厂中:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="myDataSource"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
最后,实体管理器使用注释注入DAO:
/**
* Shared, thread-safe proxy for the actual transactional EntityManager
*/
@PersistenceContext
private EntityManager em;
Run Code Online (Sandbox Code Playgroud)
当我构建并部署到Tomcat时,一切正常,但Intellij的JPA验证似乎并不了解从何处获取数据源.
在我的实体中,表的名称和列的名称用红色下划线,验证消息是"无法解析表"或"无法解析列":
@Entity
@Table(name = "domain")
public class Domain extends AbstractAgendaEntity {
Run Code Online (Sandbox Code Playgroud)
在这个例子中,它"domain"是不被认为有效的部分.
我已经在"数据库"工具窗口中手动配置了我的数据库,我可以在控制台中看到我的表并执行SQL查询.
如何告诉Intellij使用此数据源来解析JPA实体的表名?
我正在尝试对我的DAO进行单元测试(使用Spring和Hibernate).我在本教程中使用的是HSQLDB .该教程指出可以使用SQL脚本初始化内存中的HSQLDB数据库,但是我无法在Spring中找到有关如何执行此操作的信息.这是相关的Spring上下文配置:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:mem:mydb" />
<property name="username" value="sa" />
<property name="password" value="" />
<property name="initialSize" value="5" />
<property name="maxActive" value="10" />
<property name="poolPreparedStatements" value="true" />
<property name="maxOpenPreparedStatements" value="10" />
</bean>
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.谢谢.
我有一个使用Logback的Spring Boot控制台应用程序.所有属性(对于应用程序以及对于Logback)都被外部化到类路径中的标准application.properties文件中.这些属性在应用程序本身中很好地被选中,但是在logback.xml文件中没有被选中.看起来好像在Spring Boot启动之前处理了logback.xml,因此不会处理EL占位符.
使用FileNamePattern作为示例,在application.properties中,我有这样的事情:
log.filePattern=/%d{yyyy/MM-MMMM/dd-EEEE}
Run Code Online (Sandbox Code Playgroud)
在logback.xml中,我会这样:
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.logDirectory}${log.filePattern}.log
</FileNamePattern>
</rollingPolicy>
Run Code Online (Sandbox Code Playgroud)
运行应用程序时,我会看到以下错误:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@24:25 -
RuntimeException in Action for tag [rollingPolicy]
java.lang.IllegalStateException: FileNamePattern
[log.logDirectory_IS_UNDEFINEDlog.filePattern_IS_UNDEFINED.log]
does not contain a valid DateToken
Run Code Online (Sandbox Code Playgroud)
类似的代码在其他Spring(而不是Spring Boot)应用程序中运行得很好,所以我很好奇Spring Boot的行为有点不同.
感谢@Gary的回复!很高兴知道Spring EL和Logback变量之间的区别......我原以为是Spring负责为我解析这些变量.我确实有元素,但这让我思考.
我的application.properties文件在jar之外,所以Logback不知道在哪里找到它.通过保持我的春节,相关的属性在我的外部application.properties文件,移动日志相关的属性为application-internal.properties文件(位于里面的罐子),并指向的logback到该文件(<property resource="application-internal.properties" />)得到的一切工作正常!
我最近升级到Hibernate 4.0.1.Final并在上下文启动时收到以下错误:
Caused by: java.lang.NoClassDefFoundError: org/hibernate/util/DTDEntityResolver
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2823)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1160)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1655)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533)
at org.hibernate.cfg.Configuration.reset(Configuration.java:322)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:261)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:265)
at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:150)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:71)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:257)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 65 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.util.DTDEntityResolver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533)
Run Code Online (Sandbox Code Playgroud)
我的配置如下:
<!-- Holding Properties for hibernate -->
<context:property-placeholder location="classpath:hibernate.properties"/>
<!-- Configure annotated beans -->
<context:annotation-config />
<context:component-scan base-package="com.mypackage" />
<!-- Drives transactions using local JPA APIs -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean …Run Code Online (Sandbox Code Playgroud) 有一个选择下拉列表,我想在列表中添加"No selection"项目,在提交时应该给我'null'.我正在使用SimpleFormController派生控制器.
protected Map referenceData(HttpServletRequest httpServletRequest, Object o, Errors errors) throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
map.put("countryList", Arrays.asList(Country.values()));
return map;
}
Run Code Online (Sandbox Code Playgroud)
并且jspx部分是
<form:select path="country" items="${countryList}" title="country"/>
Run Code Online (Sandbox Code Playgroud)
一种可能的解决方案似乎是在列表的开头添加一个空值,然后使用自定义PropertyEditor将此"null"显示为"No selection".有更好的解决方案吗?
@Edit:我用自定义验证注释解决了这个问题,该注释检查所选值是否为"No Selection".有更标准,更简单的解决方案吗?
在我的restful webservice中,如果出现错误请求(5xx)或4xx respose代码,我会在响应中写一个自定义标题"x-app-err-id".
在客户端,我使用RestTemplate的交换方法来进行RestFul Web服务调用.当响应代码为2xx时,一切都很好.
ResponseEntity<Component> response = restTemplate.exchange(webSvcURL,
HttpMethod.POST,
requestEntity,
Component.class);
Run Code Online (Sandbox Code Playgroud)
但是如果有异常(HttpStatusCodeException),因为它是一个错误的请求(5xx)或4xx,在HttpStatusCodeException的catch块中,我得到响应(见上文)为null,所以我没有访问我的自定义头我在我的网络服务中设置.如果RestTemplate中存在异常,如何从响应中获取自定义标头.
还有一个问题是,我在错误的情况下在响应体中设置了一个错误对象(json),我想知道如何在RestTemplate中出现异常时访问响应体
使用我的第一个Maven,Spring Project获取org.springframework.beans.factory.BeanCreationException.我已经使用eclipse和Spring进行了一段时间的编程,但我正在研究使用maven来帮忙.
我在eclipse中有一个maven项目,这是我的pom.xml文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springsource.greenbeans.maven</groupId>
<artifactId>WebFlowTemplate</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>WebFlowTemplate Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.3.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.0.Final</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<finalName>WebFlowTemplate</finalName>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试运行这个Spring WebFlow项目,我会收到以下错误.我的pox.xml中缺少什么.有人可以帮我这个.
EVERE: Exception sending context initialized event to listener instance …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过遵循Hibernate EntityManager 文档中的信息来设置一个简单的jpa 2.0项目.我已经在这几个小时了,但无论我做什么,当我尝试创建一个EntityManagerFactory时,我总是得到这个异常:
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named manager1
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
at se.mycomp.UserTest.main(UserTest.java:9)
Run Code Online (Sandbox Code Playgroud)
我发现了很多关于这个例外的类似问题,但没有我能够解决的解决方案.我在这做错了什么?
目录结构
.
??? pom.xml
??? src
??? main
? ??? java
? ? ??? se
? ? ??? mycomp
? ? ??? UserTest.java
? ? ??? domain
? ? ??? User.java
? ??? resources
? ??? META-INF
? ? ??? persistence.xml
? ??? log4j.properties
??? test
??? java
Run Code Online (Sandbox Code Playgroud)
我的persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0"> …Run Code Online (Sandbox Code Playgroud) 让我先说一下这个问题,说我已经筋疲力尽了谷歌,或者至少我一直想要搜索的东西."log4j的门槛","log4j的门槛类","Log4j追加门槛类"等,但我真的不明白我正从谷歌后面的结果.
这是我给出的完整配置.我无法弄清楚如何修改它以满足我的需要.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!-- ===================================================================== -->
<!-- -->
<!-- Log4j Configuration -->
<!-- -->
<!-- ===================================================================== -->
<!-- $Id: jboss-log4j.xml 62403 2007-04-18 15:26:43Z dimitris@jboss.org $ -->
<!--
| For more configuration infromation and examples see the Jakarta Log4j
| owebsite: http://jakarta.apache.org/log4j
-->
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<!-- ================================= -->
<!-- Preserve messages in a local file -->
<!-- ================================= -->
<appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.log.dir}/server.log"/>
<param name="Append" value="false"/>
<!-- Rollover at midnight …Run Code Online (Sandbox Code Playgroud) 我想知道如何以昂首阔步的方式记录枚举.
根据JavaDoc
dataType.有关支持的数据类型,请参阅文档.如果数据类型是自定义对象,请设置其名称,或者不设置任何名称.在枚举的情况下,使用'string'和allowableValues作为枚举常量.
但我没有找到一些好的Java示例如何真正使用它,规范在这里.
package betlista.tests.swagger;
import betlista.tests.swagger.model.Input;
import betlista.tests.swagger.model.Output;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
@Api(value = "first", position = 1)
public class RestServiceFirst {
@ApiOperation(value = "foo1 operation", httpMethod = "POST", position = 1, nickname = "foo")
public void foo1(Input input) {
}
@ApiOperation(value = "bar1 operation", response = Output.class, httpMethod = "GET", position = 2, nickname = "bar")
public Output bar1() {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
package betlista.tests.swagger;
import betlista.tests.swagger.model.Input;
import betlista.tests.swagger.model.Output;
import …Run Code Online (Sandbox Code Playgroud) java ×8
spring ×6
jpa ×3
hibernate ×2
maven ×2
spring-mvc ×2
eclipse ×1
forms ×1
hsqldb ×1
log4j ×1
logback ×1
response ×1
resttemplate ×1
spring-boot ×1
swagger ×1