ਹਾਈਬਰਨੇਟ ਅਤੇ PostgreSQL ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਡੌਕਰ ਕੰਪੋਜ਼ ਵਿੱਚ JDBC ਕਨੈਕਸ਼ਨ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕਰਨਾ

ਹਾਈਬਰਨੇਟ ਅਤੇ PostgreSQL ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਡੌਕਰ ਕੰਪੋਜ਼ ਵਿੱਚ JDBC ਕਨੈਕਸ਼ਨ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕਰਨਾ
ਹਾਈਬਰਨੇਟ ਅਤੇ PostgreSQL ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਡੌਕਰ ਕੰਪੋਜ਼ ਵਿੱਚ JDBC ਕਨੈਕਸ਼ਨ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕਰਨਾ

ਇੱਕ ਡੌਕਰਾਈਜ਼ਡ ਸਪਰਿੰਗ ਐਪ ਵਿੱਚ JDBC ਕਨੈਕਸ਼ਨ ਗਲਤੀਆਂ ਨੂੰ ਸਮਝਣਾ

ਕੀ ਤੁਸੀਂ ਕਦੇ ਡੌਕਰ ਕੰਪੋਜ਼ ਅਤੇ PostgreSQL ਨਾਲ ਸਪਰਿੰਗ ਬੂਟ ਐਪਲੀਕੇਸ਼ਨ ਸੈਟ ਅਪ ਕਰਦੇ ਸਮੇਂ ਇੱਕ ਨਿਰਾਸ਼ਾਜਨਕ ਗਲਤੀ ਨੂੰ ਡੀਬੱਗ ਕਰਨ ਵਿੱਚ ਫਸ ਗਏ ਹੋ? 😩 ਜੇ ਹਾਂ, ਤਾਂ ਤੁਸੀਂ ਇਕੱਲੇ ਨਹੀਂ ਹੋ। ਬਹੁਤ ਸਾਰੇ ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਸੇਵਾਵਾਂ ਦੇ ਏਕੀਕਰਣ ਦੇ ਦੌਰਾਨ ਅਚਾਨਕ ਸਮੱਸਿਆਵਾਂ ਦਾ ਸਾਹਮਣਾ ਕਰਨਾ ਪੈਂਦਾ ਹੈ, ਇੱਥੋਂ ਤੱਕ ਕਿ ਸਹੀ ਸੰਰਚਨਾਵਾਂ ਦੇ ਨਾਲ ਵੀ।

ਇੱਕ ਆਮ ਚੁਣੌਤੀ ਉਦੋਂ ਪੈਦਾ ਹੁੰਦੀ ਹੈ ਜਦੋਂ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ PostgreSQL ਕੰਟੇਨਰ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਸਥਾਪਤ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਰਹਿੰਦੀ ਹੈ। ਵਰਗੀਆਂ ਗਲਤੀਆਂ jakarta.persistence.PersistenceException ਜਾਂ org.hibernate.exception.JDBCConnectionException ਤੁਹਾਨੂੰ ਉਲਝਣ ਵਿੱਚ ਛੱਡ ਸਕਦਾ ਹੈ। ਇਹ ਅਕਸਰ ਤੁਹਾਡੇ ਵਿੱਚ ਸਹੀ ਡੇਟਾਬੇਸ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨ ਦੇ ਬਾਵਜੂਦ ਵਾਪਰਦਾ ਹੈ application.properties ਫਾਈਲ।

ਇਸਦੀ ਕਲਪਨਾ ਕਰੋ: ਤੁਸੀਂ ਆਪਣੀ ਐਪਲੀਕੇਸ਼ਨ ਦੀ JAR ਫਾਈਲ ਬਣਾਈ ਹੈ, ਡੌਕਰ ਕੰਪੋਜ਼ ਕੌਂਫਿਗਰੇਸ਼ਨ ਸੈਟ ਅਪ ਕੀਤੀ ਹੈ, ਅਤੇ ਕੰਟੇਨਰ ਸ਼ੁਰੂ ਕੀਤੇ ਹਨ। ਫਿਰ ਵੀ, ਐਪ ਡੇਟਾਬੇਸ ਨਾਲ ਜੁੜਨ ਵਿੱਚ ਅਸਫਲ ਰਹਿੰਦੀ ਹੈ, ਨਾਲ ਸਬੰਧਤ ਗਲਤੀਆਂ ਸੁੱਟਦੀ ਹੈ JDBC ਕਨੈਕਸ਼ਨ. ਜਾਣੂ ਆਵਾਜ਼? ਤੁਸੀਂ ਇਸ ਲੜਾਈ ਵਿੱਚ ਇਕੱਲੇ ਨਹੀਂ ਹੋ।

ਇਸ ਗਾਈਡ ਵਿੱਚ, ਅਸੀਂ ਅਜਿਹੀਆਂ ਕੁਨੈਕਸ਼ਨ ਗਲਤੀਆਂ ਦੇ ਮੂਲ ਕਾਰਨਾਂ ਦੀ ਪੜਚੋਲ ਕਰਾਂਗੇ। ਅਸਲ-ਸੰਸਾਰ ਦੀਆਂ ਉਦਾਹਰਨਾਂ ਤੋਂ ਡਰਾਇੰਗ ਕਰਦੇ ਹੋਏ, ਅਸੀਂ ਇਹਨਾਂ ਸਮੱਸਿਆਵਾਂ ਦੇ ਨਿਪਟਾਰੇ ਅਤੇ ਕੁਸ਼ਲਤਾ ਨਾਲ ਹੱਲ ਕਰਨ ਲਈ ਵਿਹਾਰਕ ਨੁਕਤੇ ਸਾਂਝੇ ਕਰਾਂਗੇ, ਤਾਂ ਜੋ ਤੁਸੀਂ ਡੀਬੱਗਿੰਗ ਕੌਂਫਿਗਰੇਸ਼ਨਾਂ ਦੀ ਬਜਾਏ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਬਣਾਉਣ 'ਤੇ ਧਿਆਨ ਦੇ ਸਕੋ। 🚀

ਹੁਕਮ ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਨ
depends_on ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਦਾ ਹੈ ਕਿ ਐਪਲੀਕੇਸ਼ਨ ਕੰਟੇਨਰ PostgreSQL ਕੰਟੇਨਰ ਦੇ ਚਾਲੂ ਹੋਣ ਅਤੇ ਚੱਲਣ ਤੋਂ ਬਾਅਦ ਹੀ ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ। ਸੇਵਾ ਨਿਰਭਰਤਾਵਾਂ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨ ਲਈ ਡੌਕਰ ਕੰਪੋਜ਼ ਫਾਈਲਾਂ ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।
networks ਸੰਚਾਰ ਕਰਨ ਲਈ ਕੰਟੇਨਰਾਂ ਲਈ ਇੱਕ ਕਸਟਮ ਨੈਟਵਰਕ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦਾ ਹੈ। ਇਸ ਸਥਿਤੀ ਵਿੱਚ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਇੱਕ ਬ੍ਰਿਜ ਨੈਟਵਰਕ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਐਪ ਅਤੇ ਡੇਟਾਬੇਸ ਨਿਰਵਿਘਨ ਜੁੜ ਸਕਦੇ ਹਨ।
docker-entrypoint-initdb.d ਇੱਕ ਡੌਕਰ-ਵਿਸ਼ੇਸ਼ ਡਾਇਰੈਕਟਰੀ ਜਿੱਥੇ ਸ਼ੁਰੂਆਤੀ ਸਕ੍ਰਿਪਟਾਂ (ਜਿਵੇਂ ਕਿ SQL ਫਾਈਲਾਂ) PostgreSQL ਕੰਟੇਨਰ ਸਟਾਰਟਅਪ ਦੌਰਾਨ ਇੱਕ ਡੇਟਾਬੇਸ ਨੂੰ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਸਥਾਪਤ ਕਰਨ ਲਈ ਰੱਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।
POSTGRES_DB PostgreSQL ਕੰਟੇਨਰ ਦੁਆਰਾ ਬਣਾਏ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਡੇਟਾਬੇਸ ਦਾ ਨਾਮ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਣ ਵਾਲਾ ਵਾਤਾਵਰਣ ਵੇਰੀਏਬਲ।
POSTGRES_USER PostgreSQL ਡੇਟਾਬੇਸ ਨੂੰ ਐਕਸੈਸ ਕਰਨ ਲਈ ਡਿਫੌਲਟ ਉਪਭੋਗਤਾ ਨਾਮ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦਾ ਹੈ। ਇਹ ਡਾਟਾਬੇਸ ਕੁਨੈਕਸ਼ਨ ਸਥਾਪਤ ਕਰਨ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ।
@SpringBootTest ਐਪਲੀਕੇਸ਼ਨ ਸੰਦਰਭ ਨੂੰ ਲੋਡ ਕਰਨ ਅਤੇ ਇੱਕ ਏਕੀਕਰਣ ਟੈਸਟਿੰਗ ਦ੍ਰਿਸ਼ ਵਿੱਚ ਇਸਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਸਪਰਿੰਗ ਬੂਟ ਵਿੱਚ ਇੱਕ JUnit ਐਨੋਟੇਸ਼ਨ ਵਰਤੀ ਜਾਂਦੀ ਹੈ।
DataSource ਇੱਕ ਜਾਵਾ ਕਲਾਸ ਜੋ ਡੇਟਾਬੇਸ ਕਨੈਕਸ਼ਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਦੇ ਸਾਧਨ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ। ਇਹ ਟੈਸਟਾਂ ਵਿੱਚ ਕੁਨੈਕਸ਼ਨ ਹੈਂਡਲਿੰਗ ਨੂੰ ਸਰਲ ਬਣਾਉਣ ਲਈ ਸਪਰਿੰਗ ਬੂਟ ਦੁਆਰਾ ਟੀਕਾ ਲਗਾਇਆ ਜਾਂਦਾ ਹੈ।
try (Connection connection = ...) ਜਾਵਾ ਦਾ ਅਜ਼ਮਾਇਸ਼-ਵਿਦ-ਸਰੋਤ ਬਿਆਨ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਵਰਤੋਂ ਤੋਂ ਬਾਅਦ ਡਾਟਾਬੇਸ ਕਨੈਕਸ਼ਨ ਸਹੀ ਢੰਗ ਨਾਲ ਬੰਦ ਹੋ ਗਿਆ ਹੈ, ਸਰੋਤ ਲੀਕ ਨੂੰ ਰੋਕਦਾ ਹੈ।
volumes ਇੱਕ ਸਥਾਨਕ ਡਾਇਰੈਕਟਰੀ ਜਾਂ ਫਾਈਲ ਨੂੰ ਇੱਕ ਕੰਟੇਨਰ ਵਿੱਚ ਮੈਪ ਕਰਦਾ ਹੈ। ਇਸ ਸਥਿਤੀ ਵਿੱਚ, ਇਹ ਸ਼ੁਰੂਆਤੀਕਰਣ ਲਈ SQL ਸਕ੍ਰਿਪਟ ਨੂੰ PostgreSQL ਕੰਟੇਨਰ ਵਿੱਚ ਮੈਪ ਕਰਦਾ ਹੈ।
assert connection != null ਇੱਕ JUnit ਦਾਅਵਾ ਇਹ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਕਿ ਟੈਸਟਿੰਗ ਦੌਰਾਨ ਇੱਕ ਡੇਟਾਬੇਸ ਕੁਨੈਕਸ਼ਨ ਸਫਲਤਾਪੂਰਵਕ ਸਥਾਪਿਤ ਕੀਤਾ ਗਿਆ ਹੈ।

ਡੌਕਰ ਅਤੇ ਸਪਰਿੰਗ ਬੂਟ ਨਾਲ PostgreSQL ਕਨੈਕਸ਼ਨ ਮੁੱਦਿਆਂ ਨੂੰ ਹੱਲ ਕਰਨਾ

ਸਭ ਤੋਂ ਆਮ ਸਮੱਸਿਆਵਾਂ ਵਿੱਚੋਂ ਇੱਕ ਜਿਸ ਨਾਲ ਕੰਮ ਕਰਦੇ ਸਮੇਂ ਡਿਵੈਲਪਰਾਂ ਦਾ ਸਾਹਮਣਾ ਹੁੰਦਾ ਹੈ ਡੌਕਰ ਕੰਪੋਜ਼ ਅਤੇ PostgreSQL ਕੰਟੇਨਰਾਂ ਵਿਚਕਾਰ ਸਹੀ ਸੰਚਾਰ ਨੂੰ ਯਕੀਨੀ ਬਣਾ ਰਿਹਾ ਹੈ। ਪ੍ਰਦਾਨ ਕੀਤੀਆਂ ਸਕ੍ਰਿਪਟਾਂ ਵਿੱਚ, ਦ ਨਿਰਭਰ_ਤੇ ਕਮਾਂਡ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦੀ ਹੈ ਕਿ PostgreSQL ਕੰਟੇਨਰ ਐਪਲੀਕੇਸ਼ਨ ਕੰਟੇਨਰ ਤੋਂ ਪਹਿਲਾਂ ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ। ਹਾਲਾਂਕਿ, ਇਹ ਸਿਰਫ ਸ਼ੁਰੂਆਤੀ ਆਰਡਰ ਦੀ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ, ਨਾ ਕਿ ਡੇਟਾਬੇਸ ਦੀ ਤਿਆਰੀ ਦੀ। ਉਦਾਹਰਨ ਲਈ, ਜੇਕਰ PostgreSQL ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਵਿੱਚ ਥੋੜਾ ਸਮਾਂ ਲੱਗਦਾ ਹੈ, ਤਾਂ ਐਪਲੀਕੇਸ਼ਨ ਅਜੇ ਵੀ ਕਨੈਕਟ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਹੋ ਸਕਦੀ ਹੈ। ਇੱਕ ਅਸਲ-ਜੀਵਨ ਦ੍ਰਿਸ਼ ਵਿੱਚ ਇੱਕ ਉਪਭੋਗਤਾ ਨੂੰ ਇੱਕ ਹੈਕਾਥਨ ਦੌਰਾਨ ਆਪਣੀ ਐਪਲੀਕੇਸ਼ਨ ਲਾਂਚ ਕਰਨਾ ਸ਼ਾਮਲ ਹੋ ਸਕਦਾ ਹੈ ਤਾਂ ਜੋ ਸਮੇਂ ਦੀਆਂ ਸਮੱਸਿਆਵਾਂ ਦੇ ਕਾਰਨ ਇਹਨਾਂ ਸ਼ੁਰੂਆਤੀ ਤਰੁਟੀਆਂ ਦਾ ਸਾਹਮਣਾ ਕੀਤਾ ਜਾ ਸਕੇ। ⏳

ਸ਼ੁਰੂਆਤੀ ਸਮੇਂ ਨੂੰ ਸੰਬੋਧਿਤ ਕਰਨ ਲਈ, ਅਸੀਂ ਡੌਕਰ ਦੇ ਨੈਟਵਰਕ ਕੌਂਫਿਗਰੇਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ ਪੁਲ ਡਰਾਈਵਰ. ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਦੋਵੇਂ ਕੰਟੇਨਰ ਇੱਕੋ ਵਰਚੁਅਲ ਨੈੱਟਵਰਕ 'ਤੇ ਸੰਚਾਰ ਕਰਦੇ ਹਨ। ਨੈੱਟਵਰਕ ਦਾ ਨਾਮ ਦੇਣ ਅਤੇ ਇਸ ਨੂੰ ਦੋਨੋਂ ਸੇਵਾਵਾਂ ਨਿਰਧਾਰਤ ਕਰਨ ਦੁਆਰਾ, ਅਸੀਂ ਅਗਿਆਤ ਹੋਸਟ-ਨਾਮ ਮੁੱਦਿਆਂ ਨੂੰ ਖਤਮ ਕਰਦੇ ਹਾਂ, ਕਿਉਂਕਿ ਐਪਲੀਕੇਸ਼ਨ ਪੋਸਟਗਰੇਐਸਕਯੂਐਲ ਕੰਟੇਨਰ ਨੂੰ ਇਸਦੇ ਸੇਵਾ ਨਾਮ ਦੁਆਰਾ ਸਿੱਧਾ ਹਵਾਲਾ ਦੇ ਸਕਦੀ ਹੈ (ਉਦਾਹਰਨ ਲਈ, postgres). ਉਤਪਾਦਨ ਵਿੱਚ ਇੱਕ ਵੱਡੇ ਪੈਮਾਨੇ ਦੇ ਮਾਈਕ੍ਰੋ ਸਰਵਿਸਿਜ਼ ਆਰਕੀਟੈਕਚਰ ਨੂੰ ਚਲਾਉਣ ਦੀ ਕਲਪਨਾ ਕਰੋ; ਸਹੀ ਨੈੱਟਵਰਕ ਸੰਰਚਨਾ ਕਨੈਕਟੀਵਿਟੀ ਨੂੰ ਬਣਾਈ ਰੱਖਣ ਅਤੇ ਡੀਬੱਗਿੰਗ ਸਮੇਂ ਨੂੰ ਘਟਾਉਣ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ। 🌐

ਸਕ੍ਰਿਪਟਾਂ ਵਾਤਾਵਰਣ ਵੇਰੀਏਬਲ ਵੀ ਵਰਤਦੀਆਂ ਹਨ ਜਿਵੇਂ ਕਿ POSTGRES_USER, POSTGRES_PASSWORD, ਅਤੇ POSTGRES_DB ਡਾਟਾਬੇਸ ਨੂੰ ਗਤੀਸ਼ੀਲ ਰੂਪ ਵਿੱਚ ਸੰਰਚਿਤ ਕਰਨ ਲਈ। ਇਹ ਪਹੁੰਚ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਸਵੈਚਲਿਤ ਤੈਨਾਤੀਆਂ ਅਤੇ CI/CD ਪਾਈਪਲਾਈਨਾਂ ਲਈ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਇੱਕ ਸਾਂਝੇ ਪ੍ਰੋਜੈਕਟ 'ਤੇ ਕੰਮ ਕਰਨ ਵਾਲਾ ਇੱਕ ਡਿਵੈਲਪਰ ਡੌਕਰ ਕੰਪੋਜ਼ ਫਾਈਲ ਨੂੰ ਸੰਸਕਰਣ-ਨਿਯੰਤਰਿਤ ਕਰਕੇ, ਨਵੀਂ ਟੀਮ ਦੇ ਮੈਂਬਰਾਂ ਨੂੰ ਇੱਕ ਹਵਾ ਬਣਾ ਕੇ ਵਾਤਾਵਰਣ ਵਿੱਚ ਇੱਕਸਾਰ ਡੇਟਾਬੇਸ ਪ੍ਰਮਾਣ ਪੱਤਰਾਂ ਨੂੰ ਯਕੀਨੀ ਬਣਾ ਸਕਦਾ ਹੈ। ਇਸ ਤੋਂ ਇਲਾਵਾ, ਵਿੱਚ ਸ਼ੁਰੂਆਤੀ ਸਕ੍ਰਿਪਟਾਂ ਨੂੰ ਰੱਖਣਾ docker-entrypoint-initdb.d ਡਾਇਰੈਕਟਰੀ ਡਾਟਾਬੇਸ ਨੂੰ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਬੀਜਣ ਵਿੱਚ ਮਦਦ ਕਰਦੀ ਹੈ, ਦਸਤੀ ਸੈੱਟਅੱਪ ਕੋਸ਼ਿਸ਼ਾਂ ਨੂੰ ਘਟਾਉਂਦੀ ਹੈ।

ਅੰਤ ਵਿੱਚ, JUnit ਨਾਲ ਸਪਰਿੰਗ ਬੂਟ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਡੇਟਾਬੇਸ ਕਨੈਕਟੀਵਿਟੀ ਦੀ ਜਾਂਚ ਕਰਨਾ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਤੈਨਾਤੀ ਤੋਂ ਪਹਿਲਾਂ ਕੁਨੈਕਸ਼ਨ ਤਰਕ ਮਜ਼ਬੂਤ ​​ਹੈ। ਪ੍ਰਦਾਨ ਕੀਤੀ ਗਈ @SpringBootTest ਐਨੋਟੇਸ਼ਨ ਐਪਲੀਕੇਸ਼ਨ ਸੰਦਰਭ ਨੂੰ ਲੋਡ ਕਰਦੀ ਹੈ, ਅਤੇ ਟੈਸਟ ਵਿਧੀ ਪ੍ਰਮਾਣਿਤ ਕਰਦੀ ਹੈ ਕਿ ਡਾਟਾ ਸਰੋਤ ਬੀਨ ਇੱਕ ਕੁਨੈਕਸ਼ਨ ਸਥਾਪਤ ਕਰ ਸਕਦਾ ਹੈ. ਇਹ ਅਭਿਆਸ ਨਾ ਸਿਰਫ ਸੰਰਚਨਾ ਦੀਆਂ ਗਲਤੀਆਂ ਨੂੰ ਜਲਦੀ ਫੜਦਾ ਹੈ ਬਲਕਿ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਤੈਨਾਤੀ ਦੀ ਤਿਆਰੀ ਵਿੱਚ ਵਿਸ਼ਵਾਸ ਵੀ ਵਧਾਉਂਦਾ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਇੱਕ ਡਿਵੈਲਪਰ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਉਤਪਾਦ ਡੈਮੋ ਦੌਰਾਨ ਆਪਣੀ ਐਪ ਨੂੰ ਤੈਨਾਤ ਕਰ ਸਕਦਾ ਹੈ, ਅਤੇ ਅਜਿਹੀ ਕਿਰਿਆਸ਼ੀਲ ਜਾਂਚ ਸ਼ਰਮਨਾਕ ਆਊਟੇਜ ਤੋਂ ਬਚਣ ਵਿੱਚ ਮਦਦ ਕਰਦੀ ਹੈ। 🛠️ ਇਹਨਾਂ ਤਕਨੀਕਾਂ ਨੂੰ ਜੋੜਨਾ ਵਰਣਨ ਕੀਤੀਆਂ ਗਈਆਂ ਕੁਨੈਕਸ਼ਨ ਚੁਣੌਤੀਆਂ ਦਾ ਇੱਕ ਵਿਆਪਕ, ਭਰੋਸੇਮੰਦ ਹੱਲ ਪੇਸ਼ ਕਰਦਾ ਹੈ।

ਡੌਕਰਾਈਜ਼ਡ ਸਪਰਿੰਗ ਬੂਟ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ JDBC ਕਨੈਕਸ਼ਨ ਗਲਤੀਆਂ ਨੂੰ ਡੀਬੱਗ ਕਰਨਾ

ਸਰਵਿਸ ਆਰਕੈਸਟ੍ਰੇਸ਼ਨ ਲਈ ਡੌਕਰ ਕੰਪੋਜ਼ ਅਤੇ ਬੈਕਐਂਡ ਲਈ ਜਾਵਾ ਦੀ ਵਰਤੋਂ ਕਰਨਾ।

# Solution 1: Correcting the Hostname Configuration
# Problem: The Spring Boot application cannot resolve the hostname for the PostgreSQL container.
version: '3.7'
services:
  app:
    build: .
    ports:
      - "8090:8080"
    depends_on:
      - postgres
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/student
    networks:
      - mynetwork
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_USER: reddy
      POSTGRES_PASSWORD: 1234
      POSTGRES_DB: student
    ports:
      - "5432:5432"
    networks:
      - mynetwork
networks:
  mynetwork:
    driver: bridge

ਸਹੀ ਕਨੈਕਟੀਵਿਟੀ ਲਈ ਜਾਵਾ ਐਪਲੀਕੇਸ਼ਨ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਰੀਫੈਕਟਰ ਕਰਨਾ

ਡਾਟਾਬੇਸ ਕਨੈਕਟੀਵਿਟੀ ਲਈ ਸਪਰਿੰਗ ਬੂਟ ਸੰਰਚਨਾ ਨੂੰ ਸੋਧਣਾ।

# Solution 2: Update the application.properties file
# Problem: Incorrect database connection properties in the Spring Boot configuration.
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://postgres:5432/student
spring.datasource.username=reddy
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
server.port=8090

ਇੱਕ ਕਸਟਮ ਸ਼ੁਰੂਆਤੀ ਸਕ੍ਰਿਪਟ ਨਾਲ ਕਨੈਕਟੀਵਿਟੀ ਦੀ ਜਾਂਚ ਕਰਨਾ

ਗਲਤੀ ਨਿਦਾਨ ਅਤੇ ਡੇਟਾਬੇਸ ਸੈਟਅਪ ਲਈ ਇੱਕ ਡੇਟਾਬੇਸ ਸ਼ੁਰੂਆਤੀ ਸਕ੍ਰਿਪਟ ਜੋੜਨਾ.

# Solution 3: Using a custom SQL initialization script
# Problem: Ensuring database schema initialization during container startup.
services:
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_USER: reddy
      POSTGRES_PASSWORD: 1234
      POSTGRES_DB: student
    volumes:
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    ports:
      - "5432:5432"
    networks:
      - mynetwork
networks:
  mynetwork:
    driver: bridge

ਸਪਰਿੰਗ ਬੂਟ ਵਿੱਚ ਯੂਨਿਟ ਟੈਸਟਿੰਗ JDBC ਕਨੈਕਸ਼ਨ

ਮਜ਼ਬੂਤੀ ਲਈ JUnit ਅਤੇ Spring Boot ਨਾਲ ਡਾਟਾਬੇਸ ਕਨੈਕਟੀਵਿਟੀ ਦੀ ਜਾਂਚ ਕਰ ਰਿਹਾ ਹੈ।

# Solution 4: Write a JUnit test for database connectivity
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@SpringBootTest
public class DatabaseConnectionTest {
    @Autowired
    private DataSource dataSource;
    @Test
    public void testDatabaseConnection() throws SQLException {
        try (Connection connection = dataSource.getConnection()) {
            assert connection != null : "Database connection failed!";
        }
    }
}

ਡੌਕਰਾਈਜ਼ਡ ਸਪਰਿੰਗ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਅਣਜਾਣ ਹੋਸਟ ਐਕਸੈਪਸ਼ਨ ਦਾ ਨਿਦਾਨ ਕਰਨਾ

ਡੌਕਰਾਈਜ਼ਡ ਵਾਤਾਵਰਨ ਵਿੱਚ ਇੱਕ ਅਕਸਰ ਮੁੱਦਾ ਹੈ ਅਗਿਆਤ ਹੋਸਟ ਅਪਵਾਦ, ਜੋ ਉਦੋਂ ਵਾਪਰਦਾ ਹੈ ਜਦੋਂ ਐਪਲੀਕੇਸ਼ਨ ਡੇਟਾਬੇਸ ਕੰਟੇਨਰ ਦੇ ਹੋਸਟਨਾਮ ਨੂੰ ਹੱਲ ਨਹੀਂ ਕਰ ਸਕਦੀ। ਇਹ ਅਕਸਰ ਗਲਤ ਸੰਰਚਨਾ ਕੀਤੇ ਡੌਕਰ ਕੰਪੋਜ਼ ਨੈੱਟਵਰਕਾਂ ਜਾਂ ਸੇਵਾ ਨਾਮਾਂ ਵਿੱਚ ਟਾਈਪੋਜ਼ ਨਾਲ ਜੁੜਿਆ ਹੁੰਦਾ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਇੱਕ ਅਸਲ-ਸੰਸਾਰ ਦੇ ਮਾਮਲੇ ਵਿੱਚ, ਇੱਕ ਡਿਵੈਲਪਰ ਹੋਸਟਨਾਮ ਨੂੰ ਸੰਰਚਨਾ ਵਿੱਚ "ਪੋਸਟਗਰੇਸ" ਤੇ ਸੈਟ ਕਰ ਸਕਦਾ ਹੈ ਪਰ ਡੌਕਰ ਕੰਪੋਜ਼ ਫਾਈਲ ਵਿੱਚ ਸੇਵਾ ਦੇ ਨਾਮ ਨੂੰ ਗਲਤ ਲਿਖ ਸਕਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਗਲਤੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਨਾ ਕਿ ਸੇਵਾ ਦੇ ਨਾਮ ਸੰਰਚਨਾਵਾਂ ਵਿੱਚ ਮੇਲ ਖਾਂਦੇ ਹਨ ਅਜਿਹੇ ਮੁੱਦਿਆਂ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ। 🚀

ਵਿਚਾਰ ਕਰਨ ਲਈ ਇਕ ਹੋਰ ਪਹਿਲੂ ਹੈ ਡੇਟਾਬੇਸ ਕੰਟੇਨਰ ਦੀ ਤਿਆਰੀ. ਜਦਕਿ depends_on ਡੌਕਰ ਕੰਪੋਜ਼ ਵਿੱਚ ਸਟਾਰਟਅੱਪ ਆਰਡਰ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ, ਇਹ ਇਸ ਗੱਲ ਦੀ ਗਰੰਟੀ ਨਹੀਂ ਦਿੰਦਾ ਹੈ ਕਿ PostgreSQL ਸੇਵਾ ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਸਵੀਕਾਰ ਕਰਨ ਲਈ ਤਿਆਰ ਹੈ। ਇੱਕ ਆਮ ਪਹੁੰਚ ਐਪਲੀਕੇਸ਼ਨ ਕੰਟੇਨਰ ਦੇ ਸਟਾਰਟਅਪ ਵਿੱਚ ਦੇਰੀ ਕਰਨ ਲਈ ਇੱਕ ਉਡੀਕ-ਲਈ-ਇਸ ਸਕ੍ਰਿਪਟ ਜਾਂ ਸਮਾਨ ਸਾਧਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਹੈ ਜਦੋਂ ਤੱਕ ਡੇਟਾਬੇਸ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸ਼ੁਰੂ ਨਹੀਂ ਹੋ ਜਾਂਦਾ। ਇੱਕ ਦ੍ਰਿਸ਼ ਦੀ ਕਲਪਨਾ ਕਰੋ ਜਿੱਥੇ ਇੱਕ ਟੀਮ ਇੱਕ ਉਤਪਾਦ ਡੈਮੋ ਲਈ ਤਿਆਰੀ ਕਰ ਰਹੀ ਹੈ; ਇਸ ਤਰ੍ਹਾਂ ਦੀ ਤਿਆਰੀ ਜਾਂਚ ਸਮੇਂ ਤੋਂ ਪਹਿਲਾਂ ਕੰਟੇਨਰ ਲਾਂਚ ਕਰਕੇ ਹੋਣ ਵਾਲੀ ਸ਼ਰਮਨਾਕ ਹਿਚਕੀ ਨੂੰ ਰੋਕ ਸਕਦੀ ਹੈ। ⏳

ਅੰਤ ਵਿੱਚ, ਐਪਲੀਕੇਸ਼ਨ ਕੌਂਫਿਗਰੇਸ਼ਨ ਆਪਣੇ ਆਪ ਵਿੱਚ ਇੱਕ ਮਹੱਤਵਪੂਰਣ ਭੂਮਿਕਾ ਨਿਭਾਉਂਦੀ ਹੈ। ਵਿਚਕਾਰ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ JDBC URL ਅਤੇ ਅਸਲ ਡਾਟਾਬੇਸ ਹੋਸਟਨਾਮ ਜਾਂ ਪੋਰਟ ਲਗਾਤਾਰ ਗਲਤੀਆਂ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦਾ ਹੈ। ਦੀ ਨਿਯਮਤ ਤੌਰ 'ਤੇ ਸਮੀਖਿਆ ਅਤੇ ਜਾਂਚ application.properties ਸਥਾਨਕ ਅਤੇ ਸਟੇਜਿੰਗ ਵਾਤਾਵਰਨ ਵਿੱਚ ਫਾਈਲ ਇਹਨਾਂ ਮੁੱਦਿਆਂ ਨੂੰ ਛੇਤੀ ਫੜਨ ਵਿੱਚ ਮਦਦ ਕਰਦੀ ਹੈ। ਇੱਕ ਸੁਝਾਅ ਦੇ ਤੌਰ 'ਤੇ, ਡੇਟਾਬੇਸ URL ਨੂੰ ਸੰਰਚਿਤ ਕਰਨ ਲਈ ਵਾਤਾਵਰਣ ਵੇਰੀਏਬਲ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਤੈਨਾਤੀਆਂ ਨੂੰ ਵਧੇਰੇ ਅਨੁਕੂਲ ਬਣਾਉਂਦਾ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ ਬਹੁ-ਵਾਤਾਵਰਣ CI/CD ਪਾਈਪਲਾਈਨਾਂ ਵਿੱਚ।

ਜੇਡੀਬੀਸੀ ਅਤੇ ਡੌਕਰ ਕੰਪੋਜ਼ ਏਕੀਕਰਣ ਬਾਰੇ ਆਮ ਸਵਾਲ

  1. ਕੀ ਕਾਰਨ ਬਣਦਾ ਹੈ UnknownHostException ਗਲਤੀ?
  2. ਇਹ ਗਲਤੀ ਉਦੋਂ ਵਾਪਰਦੀ ਹੈ ਜਦੋਂ ਐਪਲੀਕੇਸ਼ਨ ਡੇਟਾਬੇਸ ਹੋਸਟਨਾਮ ਨੂੰ ਹੱਲ ਨਹੀਂ ਕਰ ਸਕਦੀ। ਵਿੱਚ ਸੇਵਾ ਦਾ ਨਾਮ ਯਕੀਨੀ ਬਣਾਓ Docker Compose ਐਪਲੀਕੇਸ਼ਨ ਸੰਰਚਨਾ ਵਿੱਚ ਹੋਸਟਨਾਮ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ।
  3. ਮੈਂ ਕਿਵੇਂ ਜਾਂਚ ਕਰ ਸਕਦਾ ਹਾਂ ਕਿ ਕੀ PostgreSQL ਇੱਕ ਕੰਟੇਨਰ ਵਿੱਚ ਤਿਆਰ ਹੈ?
  4. ਐਪਲੀਕੇਸ਼ਨ ਕੰਟੇਨਰ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ PostgreSQL ਕੰਟੇਨਰ ਦੀ ਤਿਆਰੀ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਇੱਕ ਉਡੀਕ-ਲਈ-ਇਸ ਸਕ੍ਰਿਪਟ ਜਾਂ ਸਮਾਨ ਉਪਯੋਗਤਾ ਦੀ ਵਰਤੋਂ ਕਰੋ।
  5. ਕਿਉਂ ਹੈ depends_on ਹੁਕਮ ਕਾਫ਼ੀ ਨਹੀਂ ਹੈ?
  6. depends_on ਕਮਾਂਡ ਸਿਰਫ ਸ਼ੁਰੂਆਤੀ ਆਰਡਰ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦੀ ਹੈ ਪਰ ਨਿਰਭਰ ਕੰਟੇਨਰ ਦੇ ਪੂਰੀ ਤਰ੍ਹਾਂ ਕਾਰਜਸ਼ੀਲ ਹੋਣ ਦੀ ਉਡੀਕ ਨਹੀਂ ਕਰਦੀ।
  7. ਕੀ ਕਰਦਾ ਹੈ docker-entrypoint-initdb.d ਡਾਇਰੈਕਟਰੀ ਕਰਦੇ ਹਨ?
  8. ਇਸ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਫਾਈਲਾਂ PostgreSQL ਕੰਟੇਨਰ ਦੇ ਸਟਾਰਟਅਪ ਦੇ ਦੌਰਾਨ ਆਪਣੇ ਆਪ ਚਲਾਈਆਂ ਜਾਂਦੀਆਂ ਹਨ, ਇਸ ਨੂੰ ਡੇਟਾਬੇਸ ਸ਼ੁਰੂਆਤੀ ਸਕ੍ਰਿਪਟਾਂ ਲਈ ਆਦਰਸ਼ ਬਣਾਉਂਦੀਆਂ ਹਨ।
  9. ਮੈਂ ਵਿੱਚ ਡੇਟਾਬੇਸ URL ਨੂੰ ਕਿਵੇਂ ਕੌਂਫਿਗਰ ਕਰਾਂ application.properties?
  10. ਯਕੀਨੀ ਬਣਾਓ ਕਿ URL ਇਸ ਫਾਰਮੈਟ ਦੀ ਪਾਲਣਾ ਕਰਦਾ ਹੈ: jdbc:postgresql://hostname:port/databasename, ਪਲੇਸਹੋਲਡਰਾਂ ਨੂੰ ਅਸਲ ਮੁੱਲਾਂ ਨਾਲ ਬਦਲਣਾ।

ਕੁਨੈਕਸ਼ਨ ਮੁੱਦਿਆਂ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਮੁੱਖ ਉਪਾਅ

ਇੱਕ ਡੌਕਰਾਈਜ਼ਡ ਵਾਤਾਵਰਣ ਵਿੱਚ ਇੱਕ ਸਪਰਿੰਗ ਬੂਟ ਐਪਲੀਕੇਸ਼ਨ ਅਤੇ ਇੱਕ PostgreSQL ਡੇਟਾਬੇਸ ਵਿਚਕਾਰ ਸਹੀ ਸੰਚਾਰ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣਾ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਹੋਸਟਨਾਮ ਦੇ ਮੇਲ ਖਾਂਦੀਆਂ, ਸਮੇਂ ਦੀਆਂ ਸਮੱਸਿਆਵਾਂ, ਅਤੇ JDBC ਗਲਤ ਸੰਰਚਨਾਵਾਂ ਨੂੰ ਸੰਬੋਧਿਤ ਕਰਨਾ ਗਲਤੀਆਂ ਨੂੰ ਮਹੱਤਵਪੂਰਨ ਤੌਰ 'ਤੇ ਘਟਾ ਸਕਦਾ ਹੈ। ਇਹਨਾਂ ਹੱਲਾਂ ਦੇ ਬਿਨਾਂ ਉਤਪਾਦਨ ਵਿੱਚ ਇੱਕ ਐਪ ਨੂੰ ਤੈਨਾਤ ਕਰਨ ਦੀ ਕਲਪਨਾ ਕਰੋ—ਕਨੈਕਟੀਵਿਟੀ ਸਮੱਸਿਆਵਾਂ ਗੰਭੀਰ ਦੇਰੀ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦੀਆਂ ਹਨ। ⏳

ਤਿਆਰੀ ਜਾਂਚਾਂ, ਨੈਟਵਰਕ ਕੌਂਫਿਗਰੇਸ਼ਨਾਂ, ਅਤੇ ਮਜ਼ਬੂਤ ​​​​ਗਲਤੀ ਪ੍ਰਬੰਧਨ ਨੂੰ ਲਾਗੂ ਕਰਕੇ, ਡਿਵੈਲਪਰ ਕੁਨੈਕਸ਼ਨ-ਸਬੰਧਤ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਰੋਕ ਸਕਦੇ ਹਨ। ਇਹ ਅਭਿਆਸ ਨਾ ਸਿਰਫ਼ ਵਿਕਾਸ ਅਨੁਭਵ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਂਦੇ ਹਨ ਬਲਕਿ ਭਰੋਸੇਯੋਗ ਤੈਨਾਤੀਆਂ ਨੂੰ ਵੀ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਹਨ। ਅਜਿਹੇ ਟੂਲਸ ਦੇ ਨਾਲ, ਡੀਬੱਗਿੰਗ ਇੱਕ ਮੁਸ਼ਕਲ ਤੋਂ ਘੱਟ ਹੋ ਜਾਂਦੀ ਹੈ, ਜਿਸ ਨਾਲ ਨਿਰਵਿਘਨ ਐਪਲੀਕੇਸ਼ਨ ਲਾਂਚ ਲਈ ਰਾਹ ਪੱਧਰਾ ਹੁੰਦਾ ਹੈ। 🚀

ਹਵਾਲੇ ਅਤੇ ਸਹਾਇਕ ਸਮੱਗਰੀ
  1. ਸੇਵਾਵਾਂ ਅਤੇ ਨੈਟਵਰਕਿੰਗ ਨੂੰ ਕੌਂਫਿਗਰ ਕਰਨ ਲਈ ਅਧਿਕਾਰਤ ਡੌਕਰ ਕੰਪੋਜ਼ ਦਸਤਾਵੇਜ਼ਾਂ 'ਤੇ ਵਿਸਤ੍ਰਿਤ। ਡੌਕਰ ਕੰਪੋਜ਼ ਦਸਤਾਵੇਜ਼
  2. ਸਪਰਿੰਗ ਬੂਟ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਜੇਡੀਬੀਸੀ ਕਨੈਕਸ਼ਨ ਸੈਟਅਪ ਅਤੇ ਗਲਤੀ ਨਿਪਟਾਰਾ ਬਾਰੇ ਦੱਸਦਾ ਹੈ। ਬਸੰਤ ਫਰੇਮਵਰਕ ਡਾਟਾ ਪਹੁੰਚ
  3. ਡੌਕਰ ਨਾਲ PostgreSQL ਕੰਟੇਨਰਾਂ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਬਾਰੇ ਸਮਝ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। PostgreSQL ਡੌਕਰ ਹੱਬ
  4. ਡੌਕਰ ਨੈੱਟਵਰਕਿੰਗ ਕੌਂਫਿਗਰੇਸ਼ਨਾਂ ਵਿੱਚ ਹੋਸਟਨਾਮ ਮੁੱਦਿਆਂ ਨੂੰ ਹੱਲ ਕਰਨ ਬਾਰੇ ਵੇਰਵੇ। ਡੌਕਰ ਨੈੱਟਵਰਕਿੰਗ ਦਸਤਾਵੇਜ਼
  5. ਹਾਈਬਰਨੇਟ ਸੈਸ਼ਨਫੈਕਟਰੀ ਕੌਂਫਿਗਰੇਸ਼ਨ ਅਤੇ ਸਮੱਸਿਆ ਨਿਪਟਾਰਾ ਨੂੰ ਕਵਰ ਕਰਦਾ ਹੈ। ਹਾਈਬਰਨੇਟ ਦਸਤਾਵੇਜ਼