小编Dón*_*nal的帖子

将Spring应用程序从XML迁移到注释

我继承了一个Spring 3应用程序,该应用程序使用XML文件来定义和连接bean.我知道从Spring 2开始,这些大部分都可以用注释代替.我想春天:

  • 通过扫描某些包来检测bean,其中包含用于指示Spring bean的任何注释
  • 尝试在我用相关注释标记的bean中按名称和字段进行自动装配

为实现这一目标,我需要采取哪些步骤?

java spring

4
推荐指数
1
解决办法
4898
查看次数

常规列表传播

如果运行以下Groovy代码,则断言通过

def foo(a, b) {
  a + b
}

assert 'aaabbb' == foo(['aaa', 'bbb'])
Run Code Online (Sandbox Code Playgroud)

这表明如果使用包含X元素的List参数调用方法,则将传播List并且将调用具有X参数的方法.

当然,只有在没有使用List类型(或其祖先)的单个参数定义的方法时才会发生这种情况.

我最近才读到另一个SO Groovy答案时才发现这个.我从来没有在Groovy文档,发行说明或书籍中看到它.它是一个隐藏的功能,一个错误,还是我错过的东西?

groovy

4
推荐指数
1
解决办法
209
查看次数

删除并创建SQL Server过程

我正在尝试删除并在单个脚本中创建一个过程.我试过这个:

IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'Foo')
  DROP PROCEDURE Foo
  GO

CREATE PROCEDURE dbo.Foo
-- procedure body here
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

'GO'附近的语法不正确.

如果我删除GO,我收到一个错误:

'CREATE/ALTER PROCEDURE'必须是查询批处理中的第一个语句

更新

这些脚本由Java构建工具(Maven)执行

sql-server stored-procedures

4
推荐指数
2
解决办法
2万
查看次数

更新对象时HibernateOptimisticLockingFailureException

我在更新对象时遇到异常.

HibernateOptimisticLockingFailureException:具有标识符[25614]的类[User]的对象:乐观锁定失败; 嵌套异常是org.hibernate.StaleObjectStateException:Row被另一个事务更新或删除(或unsaved-value映射不正确):[User#25614]

情况: - 我面临这个错误的原因是我有一个显示用户的表单,我有两个按钮,一个用于更新密码,另一个用于编辑用户的详细信息.当我点击更新密码时,它只是查询对象并更新其密码并将对象保持在休眠会话中.然后我单击编辑按钮并修改信息然后保存它然后它给出上面提到的异常,因为我试图保存的对象不是休眠会话对象,但是更新时hibernate查询具有相同标识符的对象密码.现在我有两个具有相同标识符的对象,一个在hibernate会话中,另一个没有持久化(不是分离对象).我想更新保存更改从非持久化对象到数据库,但因为有一个具有相同标识符的对象在hibernate会话中,所以hibernate给出了一个异常.

如何将不持久对象的更改合并到持久对象?

hibernate

4
推荐指数
1
解决办法
2万
查看次数

不使用 Grails 查询缓存

我正在尝试缓存从控制器调用的以下查询:

def approvedCount = Book.countByApproved(true, [cache: true])
Run Code Online (Sandbox Code Playgroud)

Book通过添加为该类启用了二级缓存

static mapping = {
    cache true
}
Run Code Online (Sandbox Code Playgroud)

Book.groovy。我还配置了以下内容DataSource.groovy

hibernate {
  cache.use_second_level_cache = true
  cache.use_query_cache = true
  cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
Run Code Online (Sandbox Code Playgroud)

在这同样的文件我已通过添加启用查询日志logSql=truedataSource块。

每次加载页面时,Book.countByApproved(true)都会记录查询,所以我认为这意味着没有从查询缓存中检索结果?我在本地运行所有内容,因此不可能因为缓存的查询结果已失效(由另一个用户的操作)而错过缓存。

grails caching hibernate grails-orm

4
推荐指数
1
解决办法
2411
查看次数

装饰由Grails提供的Spring bean

我知道我可以通过定义具有相同名称的自己的bean来替换Grails提供的Spring bean.例如,如果我想替换messageSourceGrails提供的bean

class MyMessageSource implements MessageSource {
    // methods omitted
}
Run Code Online (Sandbox Code Playgroud)

然后添加以下内容 resources.groovy

messageSource(MyMessageSource)
Run Code Online (Sandbox Code Playgroud)

但是,假设我想MyMessageSource装饰Grails提供的这个bean的实现

class MyMessageSource implements MessageSource {

    // this field should be set to the MessageSource impl provided by Grails
    MessageSource messageSource
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何连接它resources.groovy.显然我不能这样做:

messageSource(MyMessageSource) {
    messageSource = ref('messageSource')
}
Run Code Online (Sandbox Code Playgroud)

因为看起来我正在定义一个依赖于它自己的bean.我当然可以给我的豆子命名,例如

myMessageSource(MyMessageSource) {
    messageSource = ref('messageSource')
}
Run Code Online (Sandbox Code Playgroud)

但是,任何超出我控制范围的类(例如插件类)都声明依赖,messageSource将被设置为Grails而不是我的装饰器提供的bean.

grails spring

4
推荐指数
1
解决办法
807
查看次数

在 Groovy 中展平嵌套映射

假设我有以下结构:

Map<String,Map<String,Integer>> nestedMap = [
"x": ["a": 2, "b": 3, "c": 4],
"y": ["a": 20, "b": 30, "c": 40],
"z": ["a": 200, "b": 300, "c": 400]
]
Run Code Online (Sandbox Code Playgroud)

我想压平这个结构并得到:

[
"x-a" : 2, 
"x-b" : 3, 
"x-c" : 4,
"y-a" : 20, 
"y-b" : 30, 
"y-c" : 40,
"z-a" : 200, 
"z-b" : 300, 
"z-c" : 400
]
Run Code Online (Sandbox Code Playgroud)

我怎样才能用collect/collectEnteries等来做到这一点?

或者,如您所见,这些值非常相似。所以我构建这个嵌套地图结构的方式是运行一个 for 循环迭代[x,y,z]并将我的地图的条目设置为等于一个迭代[a,b,c]并返回地图的函数。有没有办法跳过这个嵌套结构并在功能上将元素附加到大地图中?

groovy

4
推荐指数
2
解决办法
3940
查看次数

用于截断所有MySql表的shell脚本

我正在寻找一个Unix shell脚本,它将截断模式中的所有表.已经提出了一个类似的问题,但是我还有一些额外的要求,这些要求使得所提供的答案都不令人满意

  • 必须是Unix shell脚本(即没有python,perl,PHP)
  • 该脚本必须按照与外键约束相关的顺序截断表
  • 我宁愿不必使用存储过程

唐先生,提前谢谢

mysql sql bash truncate

3
推荐指数
1
解决办法
3802
查看次数

单元测试grails标签

我写了一个Grails标签,它只是围绕Grails select标签的一个非常薄的包装器

package com.example

class MyTagLib {
  def listTrees = {attrs ->
    List<TreeDto> allTrees = getMandatoryAttributeValue(attrs, 'trees')
    out << g.select(from: allTrees)
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经为这个类进行了单元测试,但是当我运行它时,在执行最后一行时出现以下错误:

groovy.lang.MissingMethodException:没有方法签名:com.example.MyTagLib.select()适用于参数类型:(java.util.LinkedHashMap)

g在运行单元测试时,似乎无法使用命名空间中grails标记的引用.我尝试过创建集成测试,但这也不起作用.

有没有办法测试一个调用另一个标签的标签,而无需对其他标签的输出进行存根/模拟?

tags grails groovy unit-testing taglib

3
推荐指数
1
解决办法
767
查看次数

如何调用Errbit API?

起动机

Airbrake/Errbit 是收集其他应用程序生成的错误并汇总结果以供审核的应用程序。Airbrake 是一款商业应用程序,而 Errbit 是 Airbrake 的开源克隆。

主菜

我需要一些帮助来弄清楚 Errbit API。我不是在谈论您用来向 Errbit 发送错误的 API,而是 Errbit(和 Airbrake)有另一个 API,您可以用它来读回数据。Airbrake API 有相当详细的文档,但没有 Errbit API 的文档。我向 Errbit Google Group 发布了有关他们的 API 的问题,并被告知:

  • 没有文档
  • Errbit API 与 Airbrake API 不同
  • Errbit API 代码在这里

我查看了代码,但作为一个非 Rubyist,我无法理解它。

我想做的就是获取特定应用程序(项目)的错误总数。如果只能获取所有错误,那么我可以在 API 客户端中过滤掉感兴趣的项目的错误。

熟悉 Rails 应用程序的人可以看看 API 是否支持此功能,如果支持,请解释一下如何调用它(我应该使用什么 URL 和参数)?

ruby api ruby-on-rails airbrake errbit

3
推荐指数
1
解决办法
1781
查看次数