<head><!-- BaNnErBlUrFlE-HeAdEr-start -->
<style>
  #pfptBannerruzwtzt { all: revert !important; display: block !important;
    visibility: visible !important; opacity: 1 !important;
    background-color: #60beeb !important;
    max-width: none !important; max-height: none !important }
  .pfptPrimaryButtonruzwtzt:hover, .pfptPrimaryButtonruzwtzt:focus {
    background-color: #77a8c4 !important; }
  .pfptPrimaryButtonruzwtzt:active {
    background-color: #8193a0 !important; }
  html:root, html:root>body { all: revert !important; display: block !important;
    visibility: visible !important; opacity: 1 !important; }
</style>

<!-- BaNnErBlUrFlE-HeAdEr-end -->
</head><!-- BaNnErBlUrFlE-BoDy-start -->
<!-- Preheader Text : BEGIN -->
<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;max-height:0px;opacity:0;overflow:hidden;">
Hello everyone, With “Custom Scheduler Prototype v2”, the JDK loads the class specified by jdk. virtualThreadScheduler. implClass via the internal AppClassLoader. This works for typical apps, but fails for Spring Boot fat JARs where the application</div>
<!-- Preheader Text : END -->

<!-- Email Banner : BEGIN -->
<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;max-height:0px;opacity:0;overflow:hidden;">ZjQcmQRYFpfptBannerStart</div>

<!--[if ((ie)|(mso))]>
  <table border="0" cellspacing="0" cellpadding="0" width="100%" style="padding: 0px 0px 10px 0px; direction: ltr" lang="en"><tr><td>
    <table border="0" cellspacing="0" cellpadding="0" style="padding: 0px 8px 6px 8px; width: 100%; border-radius:4px; border-top:4px solid #8193a0;background-color:#60beeb;"><tr><td valign="top">
      <table align="left" border="0" cellspacing="0" cellpadding="0" style="padding: 0px 8px 4px 8px; font-size: 12px; line-height: 16px">
        <tr><td style="color:#000000; font-family: 'Arial', sans-serif; font-weight:bold; font-size:14px; line-height: 20px; direction: ltr">
          This Message Is From an Untrusted Sender
        </td></tr>
        <tr><td style="color:#000000; font-weight:normal; font-family: 'Arial', sans-serif; font-size:12px; direction: ltr">
          You have not previously corresponded with this sender.
        </td></tr>

      </table>
      <![if ie]><br clear="all"><![endif]>
      <table align="right" border="0" cellspacing="0" cellpadding="0" style="padding: 0px 0px 4px 0px; font-size: 14px; line-height: 36px"><tr>
        <td style="direction: ltr">  <a target="_blank" href="https://us-phishalarm-ewt.proofpoint.com/EWT/v1/ACWV5N9M2RV99hQ!Op20OCZDNWNhvTus2_N8MeJEQnesskq2r7GgxGykDyNNA4-uycq0qHDbuRK5bSU5gg4W_jImRrnOgyqomqy_2daMLpQS4OFFnoqBuitf0k9uHzHKvNGoQNctgSuh8FHXjJ0$" style="mso-padding-alt: 7px; padding: 7px; border-radius: 2px; border: 1px solid #666666; "><strong style="font-weight: normal; color: #000000; text-decoration: none; font-family: 'Arial', sans-serif; font-size: 14px;">  Report Suspicious  </strong></a>  ‌ </td>
      </tr></table>
    </td></tr></table>
  </td></tr></table>
<![endif]-->

<![if !((ie)|(mso))]>
  <div dir="ltr" lang="en" id="pfptBannerruzwtzt" style="all: revert !important; display:block !important; text-align: left !important; margin: 0 0 10px 0 !important; padding:7px 16px 8px 16px !important; border-radius: 4px !important; min-width: 200px !important; background-color: #60beeb !important; background-color: #60beeb; border-top: 4px solid #8193a0 !important; border-top: 4px solid #8193a0;">
    <div id="pfptBannerruzwtzt" style="all: unset !important; float:left !important; display:block !important; margin: 1px 0 1px 0 !important; max-width: 600px !important;">
      <div id="pfptBannerruzwtzt" style="all: unset !important; display:block !important; visibility: visible !important; background-color: #60beeb !important; color:#000000 !important; color:#000000; font-family: 'Arial', sans-serif !important; font-family: 'Arial', sans-serif; font-weight:bold !important; font-weight:bold; font-size:14px !important; line-height:1.29 !important; line-height:1.29">
        This Message Is From an Untrusted Sender
      </div>
      <div id="pfptBannerruzwtzt" style="all: unset !important; display:block !important; visibility: visible !important; background-color: #60beeb !important; color:#000000 !important; color:#000000; font-weight:normal; font-family: 'Arial', sans-serif !important; font-family: 'Arial', sans-serif; font-size:12px !important; line-height:1.5 !important; line-height:1.5; margin-top:2px !important;">
You have not previously corresponded with this sender.
      </div>

    </div>
    <div id="pfptBannerruzwtzt" style="all: unset !important; float: right !important; display: block !important; display: block; margin-left: 16px !important; margin-top: 1px !important; text-align: right !important; width: fit-content !important; font-size: 12px !important">
<a id="pfptBannerruzwtzt" href="https://us-phishalarm-ewt.proofpoint.com/EWT/v1/ACWV5N9M2RV99hQ!Op20OCZDNWNhvTus2_N8MeJEQnesskq2r7GgxGykDyNNA4-uycq0qHDbuRK5bSU5gg4W_jImRrnOgyqomqy_2daMLpQS4OFFnoqBuitf0k9uHzHKvNGoQNctgSuh8FHXjJ0$"
    style="all: unset !important; display: inline-block !important; text-decoration: none">
    <div class="pfptPrimaryButtonruzwtzt" style="display: inline-block !important; display: inline-block; visibility: visible !important; opacity: 1 !important; color: #000000 !important; color: #000000; font-family: 'Arial', sans-serif !important; font-family: 'Arial', sans-serif; font-size: 14px !important;  font-weight: normal !important; text-decoration: none !important; border-radius: 2px !important; margin-top: 3px !important; margin-bottom: 3px !important; margin-left: 16px !important; padding: 7.5px 16px !important; white-space: nowrap !important; width: fit-content !important;
        border: 1px solid #666666">
        Report Suspicious
    </div>
</a>
    </div>
    <div style="clear: both !important; display: block !important; visibility: hidden !important; line-height: 0 !important; font-size: 0.01px !important; height: 0px"> </div>
  </div>
<![endif]>

<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;max-height:0px;opacity:0;overflow:hidden;">ZjQcmQRYFpfptBannerEnd</div>
<!-- Email Banner : END -->

<!-- BaNnErBlUrFlE-BoDy-end -->
<div dir="ltr">





<p class="gmail-p1">Hello everyone,</p>
<p class="gmail-p1">With “Custom Scheduler Prototype v2”, the JDK loads the class specified by <span class="gmail-s1">jdk.virtualThreadScheduler.implClass</span> via the internal AppClassLoader. This works for typical apps, but fails for Spring Boot fat JARs where the application class loader is often <span class="gmail-s1">org.springframework.boot.loader.launch.LaunchedClassLoader</span>, resulting in:</p><p class="gmail-p1"><br></p><p class="gmail-p1">``` text</p><p class="gmail-p1">Exception in thread "main" java.lang.reflect.InvocationTargetException<br>        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:119)<br>        at java.base/java.lang.reflect.Method.invoke(Method.java:565)<br>        at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:106)<br>        at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64)<br>        at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:40)<br>Caused by: java.lang.Error: java.lang.ClassNotFoundException: io.github.dreamlike.springvirtualthread.CustomerVirtualThreadScheduler<br>        at java.base/java.lang.VirtualThread.loadCustomScheduler(VirtualThread.java:1511)<br>        at java.base/java.lang.VirtualThread.<clinit>(VirtualThread.java:84)<br>        at java.base/java.lang.ThreadBuilders.newVirtualThread(ThreadBuilders.java:403)<br>        at java.base/java.lang.ThreadBuilders.newVirtualThread(ThreadBuilders.java:412)<br>        at java.base/java.lang.Thread.startVirtualThread(Thread.java:1631)<br>        at io.github.dreamlike.springvirtualthread.SpringVirtualThreadApplication.main(SpringVirtualThreadApplication.java:13)<br>        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)<br>        ... 4 more<br>Caused by: java.lang.ClassNotFoundException: io.github.dreamlike.springvirtualthread.CustomerVirtualThreadScheduler<br>        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580)<br>        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:502)<br>        at java.base/java.lang.Class.forName0(Native Method)<br>        at java.base/java.lang.Class.forName(Class.java:560)<br>        at java.base/java.lang.VirtualThread.loadCustomScheduler(VirtualThread.java:1500)<br>        ... 10 more<br></p><p class="gmail-p1">```</p><p class="gmail-p1">





</p><p class="gmail-p1">Would it be feasible to switch to an SPI  (similar to JDBC) so custom schedulers are pluggable under non-standard class loaders? Potentially the same approach could apply to a pluggable Poller API.</p><p class="gmail-p1">Thanks for any guidance or discussion.</p><p class="gmail-p2"><br></p><p class="gmail-p1">Best regards,</p><p class="gmail-p1">












</p><p class="gmail-p1">Mengyang Li</p></div>