Hi Dharam-
Yes, CacheServer.setGroups(:String[]) [1] has been deprecated since Pivotal
GemFire 7.0 (well before Apache Geode's time) in favor of the gemfire.groups
System property [2].
There are many ways to define this property.
1) You can set the gemfire.groups property as a Java System property when
launching your Spring (Boot) configured/bootstrapped Apache Geode server,
as follows:
java -server -cp ... -Dgemfire.groups=A,B,C ...
2) You can set the groups using the @EnableGemfireProperties annotation as
you have shown above.
@SpringBootApplication
@CacheServerApplication
@EnableGemfireProperties(groups = "A,B,C")
public class MyBootGeodeServerApplication { ... }
3) You can configure the groups using the PeerCacheConfigurer callback,
like so...
@SpringBootApplication
@CacheServerApplication
public class MyBootGeodeServerApplication {
public static void main(String[] args) {
...
}
@Bean
PeerCacheConfigurer groupConfigurer(@Value(
"${example.app.gemfire.groups:DefaultGroup}") String groups) {
return (beanName, cacheFactoryBean) ->
cacheFactoryBean.getProperties().setProperty("groups", groups);
}
}
4) When using the new *SBDG* project, there is a new annotation for setting
groups, the *@UseGroups* annotation [4], for example...
@SpringBootApplication
@CacheServerApplication
@UseGroups({ "A", "B", "C" })
public class MyBootGeodeServerApplication {
public static void main(String[] args) {
...
}
Also see this...
https://github.com/spring-projects/spring-boot-data-geode/blob/master/spring-geode/src/test/java/org/springframework/geode/config/annotation/GroupsConfigurationIntegrationTests.java#L65
*#3* above is your best bet for configuring "groups" dynamically, since you
can define the "example.app.gemfire.groups" (or any property name of your
choosing) in different *Spring Boot* application.properties files, even
properties enabled enabled via a Spring profile.
For example, when running...
$ java -server -cp ... -Dspring.profiles.active=profileOne ...
And you have the following application properties files...
application.properties
application-profileOne.properties
application-profileTwo.properties
...
Where...
#application.properties
spring.application.name=TestServer
#application-profileOne.propertieds
example.app.gemfire.groups=A,B,C
#application-profileTwo.properties
example.app.gemfire.groups=D,E,F
Then both the application.properties and application-profileOne.properties
are applied, and you server will be in groups "A,B,C". '
spring.profiles.active' takes a comma-delimited list of profiles to enable.
See Spring Boot doc [5] for more details.
Hope this helps!
Regards,
John
[1]
http://geode.apache.org/releases/latest/javadoc/org/apache/geode/cache/server/CacheServer.html#setGroups-java.lang.String:A-
[2]
http://geode.apache.org/docs/guide/16/reference/topics/gemfire_properties.html
[3]
https://docs.spring.io/spring-data/geode/docs/current/api/org/springframework/data/gemfire/config/annotation/EnableGemFireProperties.html#groups--
[4]
https://docs.spring.io/autorepo/docs/spring-boot-data-geode-build/1.0.0.BUILD-SNAPSHOT/api/org/springframework/geode/config/annotation/UseGroups.html
[5]
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties
On Thu, Oct 4, 2018 at 7:36 AM, Thacker, Dharam <[email protected]
> wrote:
> Hi John,
>
>
>
> Could you suggest any way to dynamically set groups property using
> *“spring-data-geode
> 2.1.0.RELEASE”*?
>
>
>
> Initially I thought to use “serverGroups” using CacheServerConfigurer but
> it complains for deprecation. It’s very useful property to be set using
> dynamic way.
>
>
>
> @*EnableGemFireProperties*(enableNetworkPartitionDetection=*false*,
> groups="A,B")
>
>
>
> As an example,
>
>
>
> Let’s say we have a “Trades” cluster organized in groups by high level
> business (Say – Credit, SecuritizedProducts, Equities etc.)
>
>
>
> Inside server nodes hosting “group=Credit” trades, one can have trade
> regions for “Credit” products only (May be Bonds, Indexes, CDSs etc.).
>
> In case I see high load/demand in volume for my servers hosting trades for
> “Credit” market, I should be able to *spawn a new Peer/CacheServer member
> who belongs to “Credit” group only on-demand/trigger* (So that I don’t
> pull regions from other cluster *groups/server nodes* which I am not
> interested in)
>
>
>
> Thanks,
>
> Dharam
>
> This message is confidential and subject to terms at: http://
> www.jpmorgan.com/emaildisclaimer including on confidentiality, legal
> privilege, viruses and monitoring of electronic messages. If you are not
> the intended recipient, please delete this message and notify the sender
> immediately. Any unauthorized use is strictly prohibited.
>
--
-John
john.blum10101 (skype)