我被要求从属性样式配置转移到xml样式.这个过程本身很简单,并没有给我带来任何麻烦,我只是好奇为什么我被问到这个问题,我找到了原因.我找到了这篇不错的帖子为什么选择XML over Log4J配置的属性文件?(超过3年,但仍然是我能找到的最丰富的信息),这指向了这个更老的教程.他们说
属性可以由属性文件或XML文件定义.
Log4j查找名为log4j.xml的文件,然后查找名为log4j.properties的文件.两者都必须放在src文件夹中.
我检查了一下,与声明相反,发现Log4j首先查找属性文件,第二次查找xml.实际上,如果我将两者保存在同一文件夹中,则输出将根据属性文件进行格式化.那么,我是否误解了这一说法?这完全错了吗?这个语句是针对log4j 1.2.14进行的,而我在log4j 1.2.17上,是否有可能log4j团队改变了优先级?我找不到任何相关文档,但由于xml看起来是配置log4j的首选方式,因此它将是一个奇怪的趋势反转
编辑:对于可能对此问题感兴趣的任何人,我在问题的最后提供了相关解决方案的问题分析.
我正在为Web应用程序配置模块,其中我使用的是Spring 3.2,Hibernate 4.1,Spring Data JPA 1.3和Apache CXF 2.5(特别是JAX-RS模块).我有以下配置(工作完全正常,为简明起见,省略了详细信息):
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean getEntityManagerFactory() throws SQLException{
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
//...
return factory;
}
@Bean(name = "transactionManager")
public JpaTransactionManager getTransactionManager() throws SQLException{
JpaTransactionManager manager = new JpaTransactionManager();
//...
return manager;
}
@Bean(name = "persistenceExceptionTranslator")
public PersistenceExceptionTranslator getPersistenceExceptionTranslator(){
return new HibernateExceptionTranslator();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我必须依赖一些定义自己的外部模块PlatformTransactionManager,所以我发现自己同时使用更多的事务管理器.Transactional.html #value()可以很容易地解决这个问题,所以无论我需要在哪里使用@Transactional,我都要使用我必须用于该事务的事务管理器的名称来限定注释.
我想将我在模块中定义的事务管理器的名称更改为更有意义的名称,以满足外部模块的标准.因此,例如,externalModule1将其经理定义为externalModule1TransactionManager我想要的
@Bean(name = "myModuleransactionManager")
public JpaTransactionManager getTransactionManager() throws SQLException{
JpaTransactionManager manager = new JpaTransactionManager(); …Run Code Online (Sandbox Code Playgroud) 我有一个看起来像的测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/test-context.xml"})
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public abstract class TestClass {
@Rule @Resource public JUnitRuleMockery jMockContext;
public void test1() {
//Expectations and test
}
public void test2() {
//Expectations and test
}
}
Run Code Online (Sandbox Code Playgroud)
在test-context.xml我JUnitRuleMockery通过a 定义加上几个模拟对象factory-method,就像
<bean id="mockContextFactory" class="MockContextFactory" />
<bean id="jMockContext" factory-bean="mockContextFactory" factory-method="getContext" scope="prototype" />
<bean id="firstMock" factory-bean="mockContextFactory" factory-method="getFirstMock" />
<bean id="secondMock" factory-bean="mockContextFactory" factory-method="getSecondMock" />
Run Code Online (Sandbox Code Playgroud)
MockContextFactory 是
public class MockContextFactory
{
private JUnitRuleMockery jUnitRuleMockery;
public MockContextFactory() {
jUnitRuleMockery = new JUnitRuleMockery();
jUnitRuleMockery.setThreadingPolicy(new …Run Code Online (Sandbox Code Playgroud) Spring Cloud Greenwich 进入spring-cloud-netflix-zuul维护模式,因此我尝试从 Zuul 迁移到 Spring Cloud Gateway。
使用 Zuul 我有一条类似的路线
zuul:
routes:
masterplan_match:
path: /**/masterplans/**
serviceId: api-masterplan
Run Code Online (Sandbox Code Playgroud)
我在那里所做的基本上是忽略masterplan接收路径中之前或之后的所有内容并重定向到api-masterplan. 例如, 和/some/path/to/masterplans都/masterplans使用相同的 api(原因是masterplans它们是一个更大实体的子资源,负责创建新的masterplans,但随后masterplans可以被视为完整的资源,用于设置GET详细信息、更新、删除等目的)。
我可以将此配置映射到 Spring Cloud Gateway 吗?查看predicates,可行的似乎是path predicate,但看起来所有匹配器都适用于单个路径元素(除了WildcardTheRestPathElement,但它只能用作最后一个元素 - 我认为),即:我需要写就像是
spring
cloud:
gateway:
routes:
- id: masterplan_match
uri: lb://api-masterplan # Coming from discovery client
predicates:
- Path=/some/path/to/masterplans/**, /masterplans/**
Run Code Online (Sandbox Code Playgroud)
我是否遗漏了一些东西,两条路径可以浓缩为一条吗?
我正在尝试使用SubGit但是我遇到了分支的问题:我希望在Git下创建的分支只能在Git中生存和死亡.我发现了这个:SubGit:如何排除分支?,但它说
麻烦来自合并提交:如果提交A是将分支foo合并到主服务器的结果,则SubGit在Subversion端为commit A的相应父服务创建分支/ foo.如果您不希望SubGit生成的分支包含在branches/*namespace中,请考虑在Subversion端使用一些特殊的分支
我不想搞乱SVN,因为我正在评估Subgit,我不想在SVN上做任何改变.我想我可以在推送到Git存储库之前通过重新定位来实现我的目标(意思是,仅提交SVN合并历史而不是git分支),但我担心这会在返回SVN时导致冲突.关于我如何解决这个问题的任何想法,而不是等待SubGit 2.1版(声称做我想要的但不是在不久的将来 - 来自链接的答案:)it's going to take some time before we implement it?
总结一下即将发生的事情:
完整解释:
我正在开发一个生成 ICS 日历的应用程序。该日历通过 URL 分派给用户。到目前为止,我发现用户可以通过Calendar tab-> New Calendar->导入日历On the Network。然后提供生成日历的 URL 并按照向导操作会创建一个新日历。即使我想找到一种方法来允许用户只需单击我的链接即可导入日历(如果是这种情况,则自动触发向导),这工作得很好。我尝试将链接嵌入到邮件中,但是当单击它时,它会触发浏览器(如果以 HTTP 协议提供,或者以 WebDAV 协议提供时出现错误)。您知道有什么方法可以生成可以实现我的目标的链接吗?
然而,真正的问题是另一个。当我按照描述导入日历 ( Calendar tab-> New Calendar-> On the Network),然后尝试修改任何事件数据时,我收到一条MODIFICATION_FAILED消息,并且错误控制台仅显示
Timestamp: 03/14/2013 12:20:08 PM
Error: An error occurred when writing to the calendar Test! Error code: MODIFICATION_FAILED. Description:
Source File: resource://calendar/modules/calUtils.jsm -> file:///home/mdavi/.thunderbird/sdq097yy.default/extensions/%7Be2fda1a4-762b-4020-b5ad-a41df1933103%7D/calendar-js/calCalendarManager.js
Line: 976
Run Code Online (Sandbox Code Playgroud)
我怎样才能找到这个错误的原因?此外,我尝试将生成的日历(或从我的链接下载)导出到 ICS 文件,然后通过File-> Open->打开此类文件Calendar File ...,而不修改导出文件中的任何内容,这样我什至可以修改事件数据。所以为什么?我生成的 ICS 文件非常简单,如下所示:
BEGIN:VCALENDAR
PRODID:-//Events …Run Code Online (Sandbox Code Playgroud)