99import com .fasterxml .jackson .databind .ObjectMapper ;
1010import com .fasterxml .jackson .databind .node .ObjectNode ;
1111import com .kapeta .spring .config .providers .KapetaConfigurationProvider ;
12- import com .mongodb .ConnectionString ;
13- import com .mongodb .MongoClientSettings ;
14- import com .mongodb .MongoCredential ;
1512import lombok .extern .slf4j .Slf4j ;
1613import org .bson .Document ;
1714import org .springframework .beans .factory .annotation .Autowired ;
1815import org .springframework .beans .factory .annotation .Value ;
19- import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
2016import org .springframework .boot .autoconfigure .mongo .MongoClientSettingsBuilderCustomizer ;
21- import org .springframework .boot .autoconfigure .mongo .MongoConnectionDetails ;
2217import org .springframework .boot .autoconfigure .mongo .MongoProperties ;
2318import org .springframework .boot .autoconfigure .mongo .PropertiesMongoConnectionDetails ;
2419import org .springframework .context .annotation .Bean ;
2823import org .springframework .data .mongodb .MongoDatabaseFactory ;
2924import org .springframework .data .mongodb .MongoTransactionManager ;
3025import org .springframework .data .mongodb .core .convert .MongoCustomConversions ;
26+ import org .springframework .lang .NonNull ;
3127
3228import java .util .Arrays ;
33- import java .util .Optional ;
3429
3530/**
3631 * Mongo configuration class.
@@ -61,10 +56,23 @@ protected AbstractMongoDBConfig(String resourceName) {
6156 public KapetaConfigurationProvider .ResourceInfo mongoInfo () {
6257 return configurationProvider .getResourceInfo (RESOURCE_TYPE , PORT_TYPE , resourceName );
6358 }
59+
6460 @ Bean
6561 public PropertiesMongoConnectionDetails mongoConnectionDetails (KapetaConfigurationProvider .ResourceInfo mongoInfo ) {
6662 String databaseName = String .valueOf (mongoInfo .getOptions ().getOrDefault ("dbName" , resourceName ));
6763 String dbAuthDB = String .valueOf (mongoInfo .getOptions ().getOrDefault ("authdb" , "admin" ));
64+
65+ MongoProperties properties ;
66+ if ("mongodb+srv" .equals (mongoInfo .getProtocol ())) {
67+ properties = createMongoUriProperties (databaseName , dbAuthDB , mongoInfo );
68+ } else {
69+ properties = createMongoProperties (databaseName , dbAuthDB , mongoInfo );
70+ }
71+ return new PropertiesMongoConnectionDetails (properties );
72+ }
73+
74+ @ NonNull
75+ private MongoProperties createMongoProperties (String databaseName , String dbAuthDB , KapetaConfigurationProvider .ResourceInfo mongoInfo ) {
6876 MongoProperties properties = new MongoProperties ();
6977 properties .setDatabase (databaseName );
7078 properties .setHost (mongoInfo .getHost ());
@@ -73,7 +81,18 @@ public PropertiesMongoConnectionDetails mongoConnectionDetails(KapetaConfigurati
7381 properties .setPassword (mongoInfo .getCredentials ().getOrDefault ("password" ,"" ).toCharArray ());
7482 properties .setAuthenticationDatabase (dbAuthDB );
7583 properties .setAutoIndexCreation (true );
76- return new PropertiesMongoConnectionDetails (properties );
84+ return properties ;
85+ }
86+
87+ private MongoProperties createMongoUriProperties (String databaseName , String dbAuthDB , KapetaConfigurationProvider .ResourceInfo mongoInfo ) {
88+ String username = mongoInfo .getCredentials ().get ("username" );
89+ String password = mongoInfo .getCredentials ().getOrDefault ("password" ,"" );
90+
91+ String uri = String .format ("mongodb+srv://%s:%s@%s/%s?ssl=false&authSource=%s" , username , password , mongoInfo .getHost (), databaseName , dbAuthDB );
92+
93+ MongoProperties properties = new MongoProperties ();
94+ properties .setUri (uri );
95+ return properties ;
7796 }
7897
7998 @ Bean
0 commit comments