我正在阅读关于调度的Spring 3.0文档.我倾向于Spring的JobDetailBean for Quartz.但是@Scheduled注释引起了我的注意.看来这是使用Spring Framework调度任务的另一种方式.基于文档,Spring提供了三种调度方式:
我对JDK Timer没兴趣.我为什么要选择@Scheduled而不是Quartz?(当我提到Quartz时,我的意思是使用Spring的bean包装器进行Quartz).
假设我的用例非常复杂,我将与第三方Web服务进行通信,以便按指定的时间间隔导入和导出数据.
我有一个简单的问题.我在项目中发现了这个Hibernate配置:
<many-to-one name="employee"
class="com.myapp.Employee"
cascade="merge"
lazy="false"
fetch="select">
<column name="employee_id"
sql-type="bigint"
not-null="true"/>
</many-to-one>
Run Code Online (Sandbox Code Playgroud)
不fetch ="select"意味着"延迟加载所有集合和实体"基于提取策略.但是通过写lazy ="false"意味着不要延迟加载.所以上面的配置说:"禁用延迟加载.启用延迟加载." 实际上,这意味着属性是延迟加载的?
所以我可以将配置缩短为:
<many-to-one name="employee"
class="com.myapp.Employee"
cascade="merge"
fetch="select">
<column name="employee_id"
sql-type="bigint"
not-null="true"/>
</many-to-one>
Run Code Online (Sandbox Code Playgroud)
但是fetch ="select"是不是默认模式?所以实际上,我可以声明相同的配置:
<many-to-one name="employee"
class="com.myapp.Employee"
cascade="merge">
<column name="employee_id"
sql-type="bigint"
not-null="true"/>
</many-to-one>
Run Code Online (Sandbox Code Playgroud)
我对么?错误?想法?谢谢
如果我想启用延迟加载,我必须添加lazy ="true"并删除lazy ="false"?
我创建了一个Spring REST应用程序,您可以在其中执行基于POST,PUT,GET,DELETE的HTTP方法的CRUD操作.我有典型的URI模板
http://host/root/{id}/{name}/{address} and etc.
Run Code Online (Sandbox Code Playgroud)
我们有一个访问此REST服务的客户端.显然,他们以下列形式发送多字名称和地址的参数:
http://host/root/11/John+Smith/10+Las+Vegas+USA
Run Code Online (Sandbox Code Playgroud)
他们使用基于application/x-www-form-urlencoded类型的HTML编码方案.根据维基百科的文章
application/x-www-form-urlencoded类型
默认使用的编码基于一般URI百分比编码规则的早期版本,具有许多修改,例如换行标准化和用"+"而不是"%20"替换空格.- http://en.wikipedia.org/wiki/Percent-encoding
但是,标准URL编码方案似乎是在替换URI模板中的空格时使用%20.哪一个是正确的?
My Spring REST自动将%20转换为空格.这是正确的解释.我正在使用Spring 3.0.4.当我的REST服务满足+时,它被接受为原样.当然,当我将验证放到排除+时,它确实被排除在预期之外.
我在标准范围内还是有双重标准?或者客户使用古老的方案?
我正在使用Spring 3.0.4和JUnit 4.5.我的测试类目前使用Spring的注释测试支持,语法如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration (locations = { "classpath:configTest.xml" })
@TransactionConfiguration (transactionManager = "txManager", defaultRollback = true)
@Transactional
public class MyAppTest extends TestCase
{
@Autowired
@Qualifier("myAppDAO")
private IAppDao appDAO;
...
}
Run Code Online (Sandbox Code Playgroud)
我真的不需要行扩展TestCase来运行这个测试.单独运行此测试类时不需要它.我必须添加扩展TestCase,以便我可以在TestSuite类中添加它:
public static Test suite() {
TestSuite suite = new TestSuite("Test for app.dao");
//$JUnit-BEGIN$
suite.addTestSuite(MyAppTest.class);
...
Run Code Online (Sandbox Code Playgroud)
如果我省略扩展TestCase,我的测试套件将无法运行.Eclipse会将suite.addTestSuite(MyAppTest.class)标记为错误.
如何将Spring 3+测试类添加到测试套件中?我相信有更好的方法.我是GOOGLED并阅读文档.如果你不相信我,我愿意把你所有的书签作为证据发给你.但无论如何,我更愿意提出建设性的答案.非常感谢.
在我的web.xml上,我有一个"springmvc"servlet声明(它有一个相应的springmvc-servlet.xml)
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/myapp/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我也有我常用的applicationContext.xml文件.
首先加载哪一个?springmvc-servlet.xml还是applicationContext.xml?
我问这个的原因是每当我将<mvc:annotation-driven/>元素放在applicationContext.xml中时,我都会遇到严重上下文错误.但是当我将该元素放在springmvc-servlet.xml中时,我的Web应用程序运行正常.
有什么想法吗?
在另一个web-app上,我<mvc:annotation-driven/>在applicationContext.xml里面运行正常.
附录:我注意到aop:config的存在与mvc:annotation-driven冲突
我有一个Spring WS客户端.我通过wsimport生成了WSDL存根.
当我尝试发送请求时,我收到一个无效的内容类型异常:
严重:SAAJ0537:内容类型无效.可能是错误消息而不是SOAP消息线程"main"中的异常org.springframework.ws.soap.SoapMessageCreationException:无法从InputStream创建消息:Invalid Content-Type:text/html.这是一条错误消息而不是SOAP响应吗?嵌套异常是com.sun.xml.messaging.saaj.SOAPExceptionImpl:无效的内容类型:text/html.这是一条错误消息而不是SOAP响应吗?
这是否表示我发送的邮件内容类型无效或我收到的邮件内容类型无效?如果是在客户端,我该如何设置内容类型?
我尝试通过Soap UI模拟Web服务.我能够发送和接收正确的回复.
编辑:
在我的日志中,显示请求已发送:
DEBUG [org.springframework.ws.client.MessageTracing.sent] - 已发送请求
然后我得到了那个例外:
线程"main"中的异常org.springframework.ws.soap.SoapMessageCreationException:
我们团队中的另一个人为我的Web框架提供了一个库作为jar.我们称这个框架为"我朋友的框架".
我需要从他的框架中获得一个特定的类.该类暴露的一半属性是我自己应用程序所需要的.另一半不需要.要检索此类的属性,您需要执行一些String操作.由于我将在这个类的基础上开发我自己的框架,我想尽可能地分离依赖.也许在未来,我的另一位朋友将开发出更好的框架.
所以我做的是为该课程生成了一个外观类.我自己的框架通过我的facade类访问属性.如果"我的朋友的框架"确实改变了,我只需改变一个门面类,其余的保持不变.此外,String操作在facade类中完成.此外,facade类仅公开所需的属性.所以我自己的框架只是作为普通的getter/setter访问属性.
但是,我和这个家伙有争执.他迫使我直接使用他的班级,因为他首先不会改变他班级的实施.所以他告诉我,写一个门面课真的没有价值.但我不同意.
我错了吗?我确实相信我是对的.
Eclipse内部安装了m2 Maven插件.我可以使用"Run on Server"命令通过Eclipse WTP在Tomcat中运行我的webapp.
现在我想通过Maven修改context-path,所以我使用以下插件:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<path>${contextpath-name}</path>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但是你如何在Eclipse中运行这个插件呢?使用Eclipse WTP总是给我以下URL - http://localhost:8080/myapp
我知道我可以在独立的Maven上运行插件,但我想知道如何在Eclipse中执行它