mirror of
https://github.com/plexusorg/Plex.git
synced 2026-06-04 05:26:55 +00:00
Update MigrationRunner.java
This commit is contained in:
@@ -7,6 +7,9 @@ import dev.plex.util.PlexLog;
|
|||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLClassLoader;
|
||||||
|
import java.net.URLConnection;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
@@ -128,7 +131,7 @@ public class MigrationRunner
|
|||||||
private String readModule(PlexModule module, String resourceRoot, String version) throws SQLException
|
private String readModule(PlexModule module, String resourceRoot, String version) throws SQLException
|
||||||
{
|
{
|
||||||
String resource = resourceRoot + "/" + storageType.dialect().migrationDirectory() + "/" + version + ".sql";
|
String resource = resourceRoot + "/" + storageType.dialect().migrationDirectory() + "/" + version + ".sql";
|
||||||
try (InputStream stream = module.getResource(resource))
|
try (InputStream stream = openModuleResource(module, resource))
|
||||||
{
|
{
|
||||||
if (stream == null)
|
if (stream == null)
|
||||||
{
|
{
|
||||||
@@ -142,6 +145,32 @@ public class MigrationRunner
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a migration resource from the module's own jar.
|
||||||
|
*
|
||||||
|
* <p>A module class loader is parent-first with the Plex class loader as its
|
||||||
|
* parent, and core ships migration scripts at the same
|
||||||
|
* {@code db/migration/<dialect>/<version>.sql} paths a module uses. A plain
|
||||||
|
* {@link PlexModule#getResource(String)} lookup therefore resolves to Plex's
|
||||||
|
* core script instead of the module's own. {@link URLClassLoader#findResource}
|
||||||
|
* searches only the module jar, so the module always reads its own migration.</p>
|
||||||
|
*/
|
||||||
|
private InputStream openModuleResource(PlexModule module, String resource) throws IOException
|
||||||
|
{
|
||||||
|
if (module.getClass().getClassLoader() instanceof URLClassLoader moduleClassLoader)
|
||||||
|
{
|
||||||
|
URL url = moduleClassLoader.findResource(resource);
|
||||||
|
if (url == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
URLConnection connection = url.openConnection();
|
||||||
|
connection.setUseCaches(false);
|
||||||
|
return connection.getInputStream();
|
||||||
|
}
|
||||||
|
return module.getResource(resource);
|
||||||
|
}
|
||||||
|
|
||||||
private String replaceTableTokens(String script, Function<String, String> tableResolver) throws SQLException
|
private String replaceTableTokens(String script, Function<String, String> tableResolver) throws SQLException
|
||||||
{
|
{
|
||||||
Matcher matcher = TABLE_TOKEN_PATTERN.matcher(script);
|
Matcher matcher = TABLE_TOKEN_PATTERN.matcher(script);
|
||||||
|
|||||||
Reference in New Issue
Block a user