我正在尝试使用SprintBoot实现异步控制器.我想向控制器发出REST请求,以便控制器立即返回,同时在服务器上继续工作.
我正在关注这个Spring示例:http://spring.io/blog/2012/05/07/spring-mvc-3-2-preview-introducing-servlet-3-async-support
我怀疑这是一个配置问题.有人可以告诉我我错过了什么吗?我是Spring的新手,所以如果你能提供尽可能多的详细信息,我们将不胜感激.
使用工作控制器我做了以下更改:
// Before
@RequestMapping(method=RequestMethod.POST)
public String processUpload(final MultipartFile file) {
// ...
return "someView";
}
// After
@RequestMapping(method=RequestMethod.POST)
public Callable<String> processUpload(final MultipartFile file) {
return new Callable<String>() {
public Object call() throws Exception {
// ...
return "someView";
}
};
}
Run Code Online (Sandbox Code Playgroud)
我可以调用新的控制器,但我有以下两个问题:
请求超时时出现此错误:
2015-03-06 16:36:10.592 ERROR 13012 --- [MvcAsync1] oswcrequest.async.WebAsyncManager:由于超时或网络错误导致无法完成异步处理
更新: 我能够通过在我的应用程序文件中创建以下bean来解决超时问题:
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setPort(9000);
connector.setAsyncTimeout(60000); …
Run Code Online (Sandbox Code Playgroud) 我正在构建一个模块,用于导出我想通过我的个人资料提供的cmdlet.此cmdlet的实现分布在多个实现文件中,这些文件包含我不想公开的实现函数.所以我使用Export-ModuleMember来隐藏它们.
import-module .\get_something_impl.psm1
function Get-Something {
[cmdletbinding()]
Get-SomethingImplementation
}
Export-ModuleMember -Function Get-Something
Run Code Online (Sandbox Code Playgroud)
然后我将get_something.psm1添加到我的个人资料中.通过仅导出Get-Something,我的所有实现功能都保持"私有".
我遇到的问题是,当使用Export-ModuleMember命令时,每次我需要一个函数时,我必须在我的实现文件中导入一个模块.例如,假设我有一个模块person.psm1,其中包含我需要在所有实现文件中调用的函数Get-Person.现在我必须在每个需要调用Get-Person的文件中导入person.psm1.这是使用Export-ModuleMember -Function Get-Something的结果.没有它,我只需要导入person.psm1一次,它就可用了.
实质上,Export-ModuleMember不仅阻止我的实现到外部,它还阻止了我自己的实现.
这是预期的,并被认为是设计Powershell模块的正常方面吗?
我有一个类似于GORM的例子的许多结构:
// User has and belongs to many languages, use `user_languages` as join table
type User struct {
gorm.Model
Languages []Language `gorm:"many2many:user_languages;"`
}
type Language struct {
gorm.Model
Name string
}
db.Model(&user).Related(&languages)
Run Code Online (Sandbox Code Playgroud)
假设我创建了一个用户,它有两种相关的语言.
我从数据库中获取用户记录,并从用户的Languages数组中删除一种语言.然后我用gorm保存用户:save_associations设置为true.
我希望GORM删除将用户与该语言相关联的记录(在GORM管理的关联表中).但是,它不会被删除.这是预期的吗?
是否可以通过从用户记录的"语言"列表中删除语言然后保存用户来删除many2many关联记录?如果没有,应该如何在GORM中完成?
更新
我找到了这个问题的解决方案,但不确定这是最好的方法.我存储当前语言,清除所有关联,然后添加语言,然后保存.
languages := user.Languages
DB.Model(&user).Association("Languages").Clear()
user.Languages = languages
Run Code Online (Sandbox Code Playgroud) 在此示例中,如何获取引发异常的行号?下面的示例仅提供了我在其中调用脚本块的行号(即$ sb.Invoke())。我想要将“ FooBar中的错误”抛出的行号。
function Foobar {
throw "Error in FooBar"
}
function Bar {
FooBar
}
function Foo {
Bar
}
try {
$sb = ${function:Foo}
$sb.Invoke()
}
catch {
$ErrorMessage = $_.Exception.Message
$line = $_.InvocationInfo.ScriptLineNumber
$script_name = $_.InvocationInfo.ScriptName
write-host "<--Error: Occurred on line $line in script $script_name."
Write-host "<--Error: $ErrorMessage"
}
Run Code Online (Sandbox Code Playgroud)
更新:
如果我更改:
$sb = ${function:Foo}
$sb.Invoke()
Run Code Online (Sandbox Code Playgroud)
对此:
$func_info = get-command Foo
Invoke-Command $func_info.ScriptBlock
Run Code Online (Sandbox Code Playgroud)
有用。
我希望将所有内部 Springboot 日志消息定向到 log4j,以便消息遵循我的 log4j 属性(即它们使用我的布局转到控制台和我的 log4j 文件)。
我尝试根据本指南将 Springboot 配置为仅使用 log4j 日志记录:http : //spring.io/blog/2009/12/04/logging-dependencies-in-spring/
我已成功设置 log4j 以在使用 log4j 记录器对象时登录到控制台和文件。
但是,似乎 Springboot 在内部登录时仍在使用 slf4j。我尝试删除 slf4j 依赖项,但 Springboot 因缺少类异常而无法启动。
如何将所有内部 Springboot 日志记录定向到 log4j?