2014-10-31 39 views
0

我在做配置resource.groovy。我被困在'bean-method' xml中,它將如何設置在resource.groovy以及如何將參數傳遞給該方法。Spring xml to resource.groovy

XML配置爲:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" 
    xmlns:neo4j="http://www.springframework.org/schema/data/neo4j" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd 
http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd 
http://www.springframework.org/schema/data/neo4j 
      http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd"> 

      <context:component-scan base-package="neo4j"></context:component-scan> 
j 

    <util:map id="config"> 
     <entry key="ha.server_id" value="1" /> 
     <entry key="ha.initial_hosts" value="127.0.0.1:5001,127.0.0.1:5002" /> 
     <!-- put in more config parameters here, http://docs.neo4j.org/chunked/stable/ha-configuration.html --> 
    </util:map> 
    <bean id="graphDbFactory" 
     class="org.neo4j.graphdb.factory.HighlyAvailableGraphDatabaseFactory" /> 
    <bean id="graphDbBuilder" factory-bean="graphDbFactory" factory-method="newHighlyAvailableDatabaseBuilder"> 
     <constructor-arg value="/home/alok/Desktop/data1" /> 
    </bean> 
    <bean id="graphDbBuilderFinal" factory-bean="graphDbBuilder" 
     factory-method="setConfig"> 
     <constructor-arg ref="config" /> 
    </bean> 
    <bean id="graphDatabaseService" factory-bean="graphDbBuilderFinal" 
     factory-method="newGraphDatabase" destroy-method="shutdown" /> 

    <neo4j:config graphDatabaseService="graphDatabaseService" base-package="neo4j"/> 
    <neo4j:repositories base-package="neo4j" /> 

</beans> 

resource.groovy

beans = { 

    xmlns neo4j:"http://www.springframework.org/schema/data/neo4j" 
    xmlns context:"http://www.springframework.org/schema/context" 
    context.'component-scan'('base-package': 'neo4j') 
    neo4j.'repositories'('base-package':'neo4j') 
//  neo4j.'config'('storeDirectory':'target/db5', 'base-package':'neo4j') 

    graphDbFactory(HighlyAvailableGraphDatabaseFactory) 

    graphDbBuilder=ref('graphDbFactory'){ 
     bean -> bean.factoryMethod='newHighlyAvailableDatabaseBuilder' 
     bean.constructorArgs=['/home/alok/Desktop/data1'] 
     } 

println "after" 

graphDbBuilderFinal=ref('graphDbBuilder'){ 
    bean -> bean.factoryMethod='setConfig' 
    server_id= ["1"] 
    initial_hosts= ["127.0.0.1:5001,127.0.0.1:5002"] 
} 

graphDatabaseService=ref('graphDbBuilderFinal'){ 
    bean -> bean.factoryMethod='newGraphDatabase' 
} 

neo4j.'config'('base-package':'neo4j') 
} 

我收到錯誤bean name must not be empty

回答

1

這應該工作:

import org.neo4j.graphdb.factory.HighlyAvailableGraphDatabaseFactory 

beans = { 

    xmlns neo4j:"http://www.springframework.org/schema/data/neo4j" 
    xmlns context:"http://www.springframework.org/schema/context" 
    context.'component-scan'('base-package': 'neo4j') 
    neo4j.'repositories'('base-package':'neo4j') 
// neo4j.'config'('storeDirectory':'target/db5', 'base-package':'neo4j') 


    def config = ['ha.server_id': 1, 'ha.initial_hosts': '127.0.0.1:5001,127.0.0.1:5002'] 

    graphDbFactory(HighlyAvailableGraphDatabaseFactory) 

    graphDbBuilder(graphDbFactory: 'newHighlyAvailableDatabaseBuilder') { bean -> 
     bean.constructorArgs = ['/home/alok/Desktop/data1'] 
    } 

    graphDbBuilderFinal(graphDbBuilder: 'setConfig') { bean -> 
     bean.constructorArgs = [config] 
    } 

    graphDatabaseService(graphDbBuilderFinal: 'newGraphDatabase') { bean -> 
     bean.destroyMethod = 'shutdown' 
    } 
} 
+0

謝謝,但我面臨的一個例外是,沒有定義名爲'neo4jTemplate'的bean。 – 2014-10-31 09:51:15

+1

我想你錯過了一個配置步驟,它會爲你註冊。它應該很容易做到,但是你可能會遇到更多問題。添加導入'import org.springframework.data.neo4j.support.Neo4jTemplate',然後bean定義將是'neo4jTemplate(Neo4jTemplate,ref('graphDatabaseService'))' – 2014-10-31 10:21:13

+0

非常感謝先生,它工作正常 – 2014-10-31 12:20:11

1

與工廠,而不是一類豆類的語法是:

graphDbBuilder(graphDbFactory:"newHighlyAvailableDatabaseBuilder") { bean -> 
    bean.constructorArgs = ... 
} 

Bean的定義必須方法調用,你的版本有一個bean定義塊之外的賦值表達式,這是不允許。

+0

好了,它現在的工作。非常感謝@lan Roberts – 2014-11-02 04:37:26